Java Scanner распознавание новой строки - PullRequest
2 голосов
/ 07 мая 2011

Я не могу найти документацию, в которой указано, как сканер обрабатывает шаблоны новой строки по умолчанию. Я хочу читать файл построчно, чтобы сканер мог обрабатывать \ r, \ n или \ r \ n окончания строк независимо от системы, на которой фактически запущена программа.

Если я объявлю сканер следующим образом:

Scanner scanner = new Scanner(reader);

каково поведение по умолчанию? Будет ли он обрабатывать все три вида, как описано выше, или я должен явно указать это, чтобы сделать это?

Ответы [ 2 ]

5 голосов
/ 07 мая 2011

Глядя на исходный код Sun JDK 1.6, используется шаблон "\ r \ n | [\ n \ r \ u2028 \ u2029 \ u0085]"

, который говорит "\ r \ n" или любой из \ r, \ n или символов Юникода для "разделителя строк", "разделителя абзацев" и "следующей строки" соответственно.

3 голосов
/ 07 мая 2011

Это не задокументировано (в Java 1.6), но код JDK использует это регулярное выражение для соответствия разрыву строки:

"\r\n|[\n\r\u2028\u2029\u0085]"

Вот ссылка на исходный код: http://cr.openjdk.java.net/~briangoetz/7012540/webrev/src/share/classes/java/util/Scanner.java.html

IMO, это должно быть указано, поскольку поведение Scanner по отношению к разделителям строк отличается от (например) BufferedReader.(Я подал отчет об ошибке ...)

...