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]

. Поэтому мы можем использовать ее для соответствия:

  • u000D00A — >
    пара
  • u000A -> строка (
    )
  • u000B -> строка табуляции (НЕ путайте с таблицей символов , которая является u0009 )
  • u000C -> feed feed ( f )
  • u000D -> возврат каретки (
    )
  • u0085 -> следующая строка (NEL)
  • u2028 -> разделитель строк
  • u2029 -> разделитель абзацев

Как вы видите
помещается в начало регулярного выражения, что гарантирует, что регулярное выражение будет пытаться сначала сопоставить эту пару , и только если он не работает, он попытается сопоставить разделители строк одиночного символа .

Итак, если вы хотите используйте разделитель разделителей на линии split("\R") .

Если вы не хотите удалять из результирующего массива конечные пустые строки "" , используйте split(regex, limit) с отрицательным параметром limit , например split("\R", -1) .

Если вы хотите рассматривать одну или несколько оставшихся пустых строк в качестве одного разделителя, используйте split("\R+") .


[an error occurred while processing the directive]
Карта сайта