Конвертировать символы новой строки в символы новой строки Windows

Я хочу преобразовать все символы новой строки во входной строке в символы новой строки Windows (\r\n). Поэтому я хочу применить следующее сопоставление:

\r\n  -> \r\n
\r    -> \r\n
\n    -> \r\n

Как это сделать?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
64
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я бы поставил \r\n, \r и \n как три альтернативы, разделенные |. Если поставить \r\n первым, другие альтернативы не будут совпадать при наличии последовательности \r\n.

input.replaceAll("\r\n|\r|\n", "\r\n")

Нет смысла заменять \r\n самим собой, верно?

Tim Biegeleisen 05.06.2024 05:36

@TimBiegeleisen Да, но это то, что я считаю самым простым и наиболее четко передает 3 правила в вопросе. В любом случае это не влияет на результат. :D

Sweeper 05.06.2024 05:38

Да, согласен, теперь, когда я думаю о твоем ответе, логика чистая +1.

Tim Biegeleisen 05.06.2024 05:39

Обратите внимание, что в Java 8 и более поздних версиях есть средство сопоставления разрывов строк — \R, которое будет соответствовать любому разделителю строк.

Chaosfire 05.06.2024 06:53

Просто говорю, но я думаю, что одиночные \r разделители строк в наши дни редки. Интересно, будет ли \r\r\n восприниматься как две строки \R?

g00se 05.06.2024 08:57

@Chaosfire Хе-хе, нет. Welcome to JShell -- Version 17.0.11 | For an introduction type: /help intro jshell> "wonder if \r\r\n will".lines().count(); $1 ==> 3 jshell> new Scanner("wonder if \r\r\n will").useDelimiter("\\R").tokens().count();$2 ==> 3 говорит jshell Интересно узнать, что об этом говорит Windows VMS

g00se 05.06.2024 09:07
Ответ принят как подходящий

Вы можете попробовать заменить по следующему шаблону:

\r(?!\n)|(?<!\r)\n

Это будет соответствовать возврату каретки, за которым не следует символ новой строки (т. е. \r, но не \r\n CRLF). В противном случае он будет соответствовать только одному символу новой строки, которому не предшествует возврат каретки (опять же, не CRLF).

Использование:

input.replaceAll("\r(?!\n)|(?<!\r)\n", "\r\n");

Для интересующихся: конструкция (?! представляет собой отрицательное утверждение Lookahead: Regular-expressions.info/lookaround.html

ItIsJustMe 05.06.2024 05:39

Другие вопросы по теме