У меня есть строковая переменная, которая установлена равной userInput.nextLine(), я хочу проверить, содержит ли эта строка что-либо, кроме числовых значений.Проверьте незаконный вход .nextLine Java
if(string has non-numeric) {
break;
}
У меня есть строковая переменная, которая установлена равной userInput.nextLine(), я хочу проверить, содержит ли эта строка что-либо, кроме числовых значений.Проверьте незаконный вход .nextLine Java
if(string has non-numeric) {
break;
}
использование string.matches(regex)
функция. Регулярным выражением будет \\d+
и проверьте, на каком выходе false
.
\d
известен как Predefined Character Classes и выражение X+
: означает, что X
происходит один или несколько раз, которые известны, как Quantifiers.
, если вы хотите, чтобы знак (+ or -
) будет учитываться как часть числового значения, вы должны использовать "[\\+\\-]?\\d+"
выражение, которое будет соответствовать против входной строки "+523"
или "-563"
. Для получения дополнительной информации об этом выражении проверьте Pattern class documentation.
Если вы хотите разрешить "."
в числовом значении, как и в случае с десятичной точки, тогда вы должны использовать регулярное выражение: "[\\+\\-]?(\\d+|\\d*\\.\\d+)"
который будет соответствовать против всех типов ввода цифровых как "1254"
, "-.256"
, "+58.235"
и т.д.
выбрать любой шаблон, который будет удовлетворять ваши потребности и чем матч против вашей входной строки проверки вянет это приводит к false
: это означает, что не действительный цифровой вход.
String pattern = "[\\+\\-]?(\\d+|\\d*\\.\\d+)" ; // or only \\d+
//or [\\+\\-]?\\d+
if(!string.matches(pattern)) // not a valid numeric input {
}
Try Catch может быть другим альтернативным способом.
try{
Long.parseInt(string);
делать то, что когда-либо youy нужно делать со своим значением числа.
}catch(NumberFormatException ex){
}
Это была моя первоначальная мысль, я использовал их для некоторых других заданий в AP CS, но мой учитель сказал, чтобы попытаться избежать их, потому что они «дороги», это правда? –
Не знаете о «дорогих», вы должны попросить учителей тогда и выяснить «сложность» этого, а также попробовать с худшим случаем вашей проблемы. Не забудьте поделиться этим ... – Dipak
Насколько я знаю, метод try catch может быть быстрее, чем большинство других проверок. синтаксический анализатор работает с шагом O (n) (это один шаг на каждую букву на входе), и исключения работают очень быстро O (1) (независимо от того, что вход всегда 1 шаг). На самом деле, поскольку ряд исключений выполняется процессором, а не java-кодом, некоторые исключения могут быть действительно более быстрыми, чем тогда, когда инструкции (с учетом разницы очень малы и занимают только 1/миллионную долю секунды). – Thijser
Если вы хотите, чтобы показать, используйте String.matches() с регулярным выражением. Или вы можете перебирать его, char by char, используя String.charAt().
Я думаю, что это будет делать
String str1 = "123456";
System.out.println(str1.matches("[^0-9]+"));
Выходной будет false
и если вы
System.out.println(str1.matches("[0-9]+"));
выход будет true
Попробуйте совпадение строк #. http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#matches(java.lang.String) – Shobit
Если это домашнее задание, скорее всего, желаемый ответ состоял бы в повторении строку и проверить ее char на char – Zavior