2015-05-03 2 views
0

Строка переменной result имеет следующую строку:Длина сканера не соответствует! Java

All Prime Numbers Up To {10}: 
1 2 3 4 5 6 7 8 9 

Когда я использую этот код для сканирования каждый числовой маркер и возвращает его длину:

Scanner scan = new Scanner(result); 
     while (scan.hasNext()) { 
      String num = scan.next(); 
      if (num.matches(".*\\d.*")) { 
       System.out.print("number:  "); 
       System.out.println(num); 
       System.out.print("The length: "); 
       System.out.println(num.length()); 
       System.out.println("----"); 
      } 
     } 

Результат показывает следующее:

Please Enter a Number: 9 
number:  {9}: 
The length: 4 
---- 
number:  1 
The length: 1 
---- 
number:  2 
The length: 10 
---- 
number:  3 
The length: 10 
---- 
number:  4 
The length: 1 
---- 
number:  5 
The length: 10 
---- 
number:  6 
The length: 1 
---- 
number:  7 
The length: 10 
---- 
number:  8 
The length: 1 
---- 
number:  9 
The length: 1 
---- 

Почему он не печатает правильную длину каждого знака чисел? Несмотря на то, что он правильно печатает его!

+0

Кажется, что-то не так с вашим регулярным выражением? или почему вам нужно использовать регулярное выражение? –

+0

потому что у меня есть строка, и я хочу вернуть только числовые значения @KickButtowski – fox

+0

Что такое правильное регулярное выражение, которое возвращает true, если следующий токен - это все числа? Так что если токен '{w10', он возвращает false @KickButtowski – fox

ответ

1

Как инициализировать переменную ?

String result = "All Prime Numbers Up To {10}:\n1 2 3 4 5 6 7 8 9"; 

Используя инициализацию выше, я получаю правильную длину 1 для всех чисел 1-9. Я бы использовал что-то вроде этого:

String result = "All Prime Numbers Up To {10}:\n1 2 3 4 5 6 7 8 9"; 

Scanner scan = new Scanner(result); 
while (scan.hasNext()) { 
    if (scan.hasNextInt()) { 
     Integer num = scan.nextInt(); 
     System.out.println("number: "+num); 
     System.out.println("The length: "+num.toString().length()); 
     System.out.println("----"); 
    } 
    else { 
     scan.next(); 
    } 
} 
scan.close(); 
+0

Собственно, вы тоже правы. Мой код был прав, но причина, по которой он не дал мне точной длины для всех простых чисел (если вы заметили), заключается в том, что я использовал этот код '(char) 27 +" [31m "+" .... простое число .... "+ (char) 27 +" [0m "' для печати всех простых чисел с красным цветом. – fox

+0

Хороший смысл использовать 'hasNextInt()' вместо регулярного выражения для того же результата – tomse

0

Я понял причину благодаря @KickButtowski. Проблема была в моем регулярном выражении.

Мне пришлось изменить его на следующее: "[0-9]+" тогда это сработало!

Несмотря на то, что мой предыдущий код не был неправильным, это регулярное выражение решило еще одну проблему, которая была у меня в моем коде. Если бы я использовал регулярное выражение ".*\\d.*", он будет возвращать числа, смешанные с символами, и я не хотел этого.

+0

, но это регулярное выражение означает, что если у вас есть число, повторяющее одно или несколько раз, но что произойдет, если у вас есть алфавитный символ в вашей строке ? –

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