Java string перенос строки
А вот такое
System.out.print("ABCDEFG
1234");
выдаст
ABCDEFG
1234
т. е. переход на новую строку.
LF (ASCII 0x0A) используется в Multics, UNIX, UNIX-подобных операционных системах (GNU/Linux, AIX, Xenix, Mac OS X, FreeBSD и др.) , BeOS, Amiga UNIX, RISC OS и других;
CR (ASCII 0x0D) используется в 8-битовых машинах Commodore, машинах TRS-80, Apple II, системах Mac OS до версии 9 и OS-9;
CR+LF (ASCII 0x0D 0x0A) используется в DEC RT-11 и большинстве других ранних не-UNIX- и не-IBM-систем, а также в CP/M, MP/M (англ.) , MS-DOS, OS/2, Microsoft Windows, Symbian OS, протоколах Интернет.
Прежде чем я заново изобрету колесо (плохо), я хотел бы знать, существует ли какой-нибудь существующий код Java для переноса текстовых строк до заданной максимальной ширины. В идеале это будет:
- уважать существующие разрывы строк
- разбить строки, превышающие максимальную длину на границах слов
- разбить слова, длина которых превышает максимальную ширину строки, вставив дефисы
Я пытаюсь разделить текст в JTextArea с помощью регулярного выражения, чтобы разделить String на
. Однако это не работает, и я также пытался использовать
|
|n и многие другие комбинации регулярных выражений. Код:
17 ответов
Это должно охватывать вас:
Есть только две новые строки (UNIX и Windows), о которых вам нужно беспокоиться.
В java-11 был введен новый метод lines , который возвращает Stream
Возвращает поток подстрок, извлеченный из этой строки, разбитой на разделители строк.
Определяемые терминаторы строк — это строка «
» (U + 000A), возврат каретки «
» (U + 000D) и возврат каретки, line-канал "
" (U + 000D U + 000A).
Вот несколько примеров:
Вышеприведенный код фактически ничего не видит — он просто вычисляет, а затем выдает расчет. Это код, который вы использовали, или просто пример для этого вопроса?
попытаться выполнить textAreaDoc.insertString (int, String, AttributeSet) в конце?
split метод использует регулярное выражение (регулярное выражение). Так как Java 8 regex поддерживает R , который представляет (из документации класса Шаблона ):
Соединитель строк
& emsp; & emsp; & emsp; & emsp; & emsp; & emsp; & emsp; & emsp; & emsp; Любая последовательность строк Unicode, эквивалентна u000Du000A|[u000Au000Bu000Cu000Du0085u2028u2029]
. Поэтому мы можем использовать ее для соответствия:
- u000D 00A — >
пара - u000A -> строка (
) - u000B -> строка табуляции (НЕ путайте с таблицей символов , которая является u0009 )
- u000C -> feed feed ( f )
- u000D -> возврат каретки (
) - u0085 -> следующая строка (NEL)
- u2028 -> разделитель строк
- u2029 -> разделитель абзацев
Как вы видите
помещается в начало регулярного выражения, что гарантирует, что регулярное выражение будет пытаться сначала сопоставить эту пару , и только если он не работает, он попытается сопоставить разделители строк одиночного символа .
Итак, если вы хотите используйте разделитель разделителей на линии split("\R") .
Если вы не хотите удалять из результирующего массива конечные пустые строки "" , используйте split(regex, limit) с отрицательным параметром limit , например split("\R", -1) .
Если вы хотите рассматривать одну или несколько оставшихся пустых строк в качестве одного разделителя, используйте split("\R+") .