Java regex - странное поведение: [дублировать]JAVA

Программисты JAVA общаются здесь
Anonymous
Java regex - странное поведение: [дублировать]

Сообщение Anonymous »

Я пытаюсь использовать очень простую регуляцию для разделителя в классе сканера. Сравнение двух строк ниже: < /p>

Pattern pattern = Pattern.compile("\\r\\n|\\s");
< /code>

и < /p>

Pattern pattern = Pattern.compile("\\s|\\r\\n");
< /code>

Предполагая, что '|' действует как оператор, известно, что a | B = b | О. Какова может быть причина, по которой я получаю разные результаты? < /p>

Заранее спасибо. < /p>

Первый дает мне: < /p>

one
two
three
< /code>

В то время как второй дает мне: < /p>

one

two

three
< /code>

Файл - это текстовый файл с: < /p>

one[CR][LF]
two[CR][LF]
three
< /code>

Проверьте код, который я использую ниже: < /p>

String d = "";
Pattern pattern = Pattern.compile("\\s|\\r\\n");

try (Scanner sc = new Scanner(new FileInputStream("input/input.txt")).useDelimiter(pattern)) {

while (sc.hasNext()) {
d = sc.next();
System.out.println(d);
}
< /code>

Я не верю, что это дублированный вопрос, упомянутый по двум причинам: во -первых, и обратно к предполагаемому дублированному посту, «foo» явно содержится в «foobar»; \ r \ n явно не содержатся в \ s. Во -вторых, не очевидно, что C# regex работает так же, как Java. Я проверил пост, который вы упомянули перед публикацией здесь вопроса, и он не ответил на мой вопрос.

Подробнее здесь: https://stackoverflow.com/questions/416 ... d-behavior

Вернуться в «JAVA»