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