2013-10-07 4 views
1

Stackoverflow, привет. У меня есть проблемы с пониманием выход на этот кусок кодаСканер Java nextLong

public static void main (String[] args) 
{ 
    String context = "0100 55 3L 62D 127 6F (int)7"; 
    Scanner s = new Scanner(context); 
    while(s.hasNextLong()) { 
     System.out.print(s.nextLong() + ","); 
    } 
} 

Выход 100,55, , но я не понимаю, почему 127 не был включен на выход? Я имею в виду, почему вывод не похож на 100,55,127,?

ответ

3

Scanner#nextLong() не разбирает Long литералов, он анализирует числа как длинные, поэтому не удается найти его на 3L и выходит из цикла, т.е. hasNextLong()false.

Обратите внимание на Javadoc

сканирует следующий маркер ввода, как долго.

В этом случае следующий маркер 3L и не разобрать на Long. Попробуйте

Long.parseLong("3L"); 

предоставит вам NumberFormatException.

+0

Спасибо, очень ясный ответ. – user2654250

1

Непосредственно из javadoc api: Возвращает true, если следующий токен в этом входе сканера можно интерпретировать как длинное значение в базовом значении по умолчанию, используя метод nextLong. Сканер не продвигается мимо какого-либо входа.

0

Проблема заключается в 3L 62D, попробуйте изменить свой вход, как:

String context = "0100 55 127 3L 62D 6F (int)7"; 

чем выход будет: 100, 55, 127