1. Обзор
В этом руководстве мы рассмотрим различные способы разделения строки Java по символам новой строки. Поскольку символ новой строки различается в разных операционных системах, мы рассмотрим этот метод для Unix, Linux, Mac OS 9 и более ранних версий, macOS и ОС Windows.
2. Разделить строку
по новой строке
2.1. Разделить строку
по новой строке с помощью метода System#lineSeparator
Учитывая, что символ новой строки различается в разных операционных системах, мы можем использовать системные константы или методы, когда хотим, чтобы наш код не зависел от платформы.
Метод System#lineSeparator
возвращает строку разделителя строк для базовой операционной системы. Он возвращает значение системного свойства line.separator
.
Следовательно, мы можем использовать строку-разделитель строк, возвращаемую методом System#lineSeparator
, вместе с методом String#split для разделения
строки
Java по символу новой строки:
String[] lines = "Line1\r\nLine2\r\nLine3".split(System.lineSeparator());
Результирующие строки будут такими:
["Line1", "Line2", "Line3"]
2.2. Разделить строку
по новой строке с помощью регулярных выражений
Далее давайте начнем с рассмотрения различных символов, используемых для разделения строк в разных операционных системах.
Символ « \n
» разделяет строки в Unix, Linux и macOS. С другой стороны, символ « \r\n
» разделяет строки в среде Windows. Наконец, символ « \r
» разделяет строки в Mac OS 9 и более ранних версиях.
Поэтому нам нужно позаботиться обо всех возможных символах новой строки при разбиении строки на новые строки с помощью регулярных выражений.
Наконец, давайте посмотрим на шаблон регулярного выражения, который охватывает все символы новой строки различных операционных систем. То есть нам нужно искать шаблоны «\n», «\r\n» и «\r». Это легко сделать с помощью регулярных выражений в Java .
Шаблон регулярного выражения, охватывающий все различные символы новой строки, будет таким:
"\\r?\\n|\\r"
Разобравшись, мы видим, что:
\\n
= шаблон Unix, Linux и macOS\\r\\n
= шаблон среды Windows\\r
= шаблон MacOS 9 и более ранних версий
Далее воспользуемся методом split String
#
для разделения строки
Java . Давайте рассмотрим несколько примеров:
String[] lines = "Line1\nLine2\nLine3".split("\\r?\\n|\\r");
String[] lines = "Line1\rLine2\rLine3".split("\\r?\\n|\\r");
String[] lines = "Line1\r\nLine2\r\nLine3".split("\\r?\\n|\\r");
Результирующие строки для всех примеров будут такими:
["Line1", "Line2", "Line3"]
2.3. Разделить строку
по новой строке в Java 8
Java 8 предоставляет шаблон «\R»
, который соответствует любой последовательности разрыва строки Unicode и охватывает все символы новой строки для разных операционных систем. Поэтому мы можем использовать шаблон «\R»
вместо «\\r?\\n|\\r»
в Java 8 или выше.
Давайте рассмотрим несколько примеров:
String[] lines = "Line1\nLine2\nLine3".split("\\R");
String[] lines = "Line1\rLine2\rLine3".split("\\R");
String[] lines = "Line1\r\nLine2\r\nLine3".split("\\R");
Опять же, результирующие выходные строки для всех примеров будут такими:
["Line1", "Line2", "Line3"]
2.4. Разделить строку
по новой строке с использованием класса шаблона
В Java 8 класс Pattern
поставляется с удобным методом splitAsStream
.
В нашем случае мы можем использовать шаблон «\R»
, но, конечно, этот метод также может быть использован для разделения строки
любым, более сложным регулярным выражением .
Давайте посмотрим на это в действии:
Pattern pattern = Pattern.compile("\\R");
Stream<String> lines = pattern.splitAsStream("Line1\nLine2\nLine3");
Stream<String> lines = pattern.splitAsStream("Line1\rLine2\rLine3");
Stream<String> lines = pattern.splitAsStream("Line1\r\nLine2\r\nLine3");
Как мы видим, на этот раз вместо массива мы получаем Stream
of String
, который мы можем легко обрабатывать дальше.
2.5. Разделить строку
по новой строке в Java 11
Java 11 делает разделение по новой строке очень простым:
Stream<String> lines = "Line1\nLine2\rLine3\r\nLine4".lines();
Поскольку lines()
использует шаблон «\R»
под капотом, он работает со всеми видами разделителей строк.
Как мы видим, сложно найти более простой способ разбить строку
по символу новой строки!
3. Заключение
В этой быстрой статье мы рассмотрели различные символы новой строки, с которыми мы, вероятно, столкнемся в разных операционных системах. Кроме того, мы увидели, как разделить строку Java на символы новой строки, используя наш собственный шаблон регулярного выражения, а также шаблон «\R»
, доступный, начиная с Java 8.
Как всегда, все эти примеры кода доступны на GitHub .