2013-11-16 3 views
1

У меня есть строковая переменная, которая установлена ​​равной userInput.nextLine(), я хочу проверить, содержит ли эта строка что-либо, кроме числовых значений.Проверьте незаконный вход .nextLine Java

if(string has non-numeric) { 
    break;  
} 
+0

Попробуйте совпадение строк #. http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#matches(java.lang.String) – Shobit

+0

Если это домашнее задание, скорее всего, желаемый ответ состоял бы в повторении строку и проверить ее char на char – Zavior

ответ

0

использование string.matches(regex) функция. Регулярным выражением будет \\d+ и проверьте, на каком выходе false.

  1. \d известен как Predefined Character Classes и выражение X+: означает, что X происходит один или несколько раз, которые известны, как Quantifiers.

  2. , если вы хотите, чтобы знак (+ or -) будет учитываться как часть числового значения, вы должны использовать "[\\+\\-]?\\d+" выражение, которое будет соответствовать против входной строки "+523" или "-563". Для получения дополнительной информации об этом выражении проверьте Pattern class documentation.

  3. Если вы хотите разрешить "." в числовом значении, как и в случае с десятичной точки, тогда вы должны использовать регулярное выражение: "[\\+\\-]?(\\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 { 

    } 
2

Try Catch может быть другим альтернативным способом.

try{ 
    Long.parseInt(string); 

делать то, что когда-либо youy нужно делать со своим значением числа.

}catch(NumberFormatException ex){ 

} 
+0

Это была моя первоначальная мысль, я использовал их для некоторых других заданий в AP CS, но мой учитель сказал, чтобы попытаться избежать их, потому что они «дороги», это правда? –

+0

Не знаете о «дорогих», вы должны попросить учителей тогда и выяснить «сложность» этого, а также попробовать с худшим случаем вашей проблемы. Не забудьте поделиться этим ... – Dipak

+1

Насколько я знаю, метод try catch может быть быстрее, чем большинство других проверок. синтаксический анализатор работает с шагом O (n) (это один шаг на каждую букву на входе), и исключения работают очень быстро O (1) (независимо от того, что вход всегда 1 шаг). На самом деле, поскольку ряд исключений выполняется процессором, а не java-кодом, некоторые исключения могут быть действительно более быстрыми, чем тогда, когда инструкции (с учетом разницы очень малы и занимают только 1/миллионную долю секунды). – Thijser

0

Если вы хотите, чтобы показать, используйте String.matches() с регулярным выражением. Или вы можете перебирать его, char by char, используя String.charAt().

0

Я думаю, что это будет делать

String str1 = "123456"; 
     System.out.println(str1.matches("[^0-9]+")); 

Выходной будет false

и если вы

System.out.println(str1.matches("[0-9]+")); 

выход будет true

Смежные вопросы