Используя hasNext (Pattern) Java Scanner, чтобы найти ведущий '+' - PullRequest
2 голосов
/ 22 июля 2010

У меня есть сканер, который работал гладко до тех пор, пока я не попробую метод hasNext (Pattern), чтобы найти начальный символ «+». Вот что я пытался сделать:

File file = new File("Somefile.txt");
Scanner input = new Scanner(file);
while (!input.hasNext(Pattern.compile("^\\+"))) {
   System.out.println("No leading +:" + input.next());
}

Что, кажется, имеет смысл. Тем не менее, программа зацикливается на множество строк с лидирующим знаком «+». Что я делаю не так?

Ответы [ 2 ]

2 голосов
/ 22 июля 2010

Проблема в том, что вы пытаетесь сопоставить токены с началом строки с ^.Токены никогда не будут содержать новых строк для начала (они будут просто подстроки, разделенные разделителем), поэтому ^ не имеет смысла.Если вы хотите прочитать строки с помощью сканера, я предлагаю вам сделать

Scanner input = new Scanner(file).useDelimiter("\n");

Затем просто отбросьте ^, и оно будет работать:

while (!input.hasNext(Pattern.compile("\\+.*")))
    System.out.println("No leading +: " + input.next());
0 голосов
/ 22 июля 2010

Javadoc говорит о методе hasNext ():

Возвращает true, если следующий полный токен соответствует указанному шаблону.

«Полный токен» в вашем случае, поскольку вы не изменили разделитель, ограничен пробелом. В начале токенов вы найдете только отдельные знаки «+», а не «+».

Кроме того, неясно, что вы подразумеваете под «ведущим символом +». Вы имеете в виду в начале строки или в начале каждого токена?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...