Проблема новой строки в шаблоне Java - PullRequest
1 голос
/ 11 апреля 2011

При чтении документации для Pattern он объявляет \s символом пробела: [ \t\n\x0B\f\r].Так почему второй сканер ниже возвращает null и как я могу заставить шаблон работать с символом новой строки?

import java.util.*;

public class Main
{
    public static void main(String[] args)
    {

        String pattern = "\\s*a";

        Scanner scanner1 = new Scanner("    \t a");
        Scanner scanner2 = new Scanner("  \t\n a");

        System.out.println(scanner1.findInLine(pattern));
        System.out.println(scanner2.findInLine(pattern));
    }
}

Вывод:

         a
null

1 Ответ

7 голосов
/ 11 апреля 2011

findInLine останавливается, когда встречается разрыв строки (как следует из названия):

"  \t\n a"
 ^^^^
   |  
   +-- this is where findInLine(...) searches for the pattern: `\s*a`

Вы должны использовать findWithinHorizon(...) вместо:

String pattern = "\\s*a";
Scanner scanner1 = new Scanner("    \t a");
Scanner scanner2 = new Scanner("  \t\n a");
System.out.printf(">%s<\n\n", scanner1.findInLine(pattern));
System.out.printf(">%s<", scanner2.findWithinHorizon(pattern, 0));

напечатает:

>        a<

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