Как я могу заменить все разрывы строк из строки в Java таким образом, чтобы это работало в Windows и Linux (т. Е. Без проблем, связанных с возвратом каретки / переводом строки / новой строкой и т. Д.)?
Я пробовал (обратите внимание, readFileAsString - это функция, которая читает текстовый файл в строку):
String text = readFileAsString("textfile.txt");
text.replace("\n", "");
но это не похоже на работу.
Как это может быть сделано?
java
string
newline
line-breaks
дерево-хакер
источник
источник
myString.trim().replaceAll("[\n]{2,}", "\n")
или заменить один пробелmyString.trim().replaceAll("[\n]{2,}", " ")
Ответы:
Вам необходимо установить
text
результатыtext.replace()
:Это необходимо, потому что строки неизменны - вызов
replace
не изменяет исходную строку, а возвращает новую, которая была изменена. Если вы не присваиваете результатtext
, тогда эта новая строка теряется и мусор собирается.Что касается получения новой строки String для любой среды - это доступно по телефону
System.getProperty("line.separator")
.источник
replace()
Метод возвращает желаемый результат. Также смотрите документацию по API: java.sun.com/javase/6/docs/api/java/lang/… Редактировать: ах вы уже редактировали это потом :)text = text.replace("\r\n", " ").replace("\n", " ");
, это лучшее решение: в противном случае слова будут «склеены» друг с другом (без замены одного пробела)..replaceAll("[\\r\\n]+", "")
text = text.replaceAll("\n", "").replaceAll("\r", "");
replaceAll
принимает регулярные выражения,replace
принимает буквальные строки, оба заменяют все вхождения.Как отмечено в других ответах, ваш код не работает в первую очередь потому,
String.replace(...)
что не меняет цельString
. (Это невозможно - строки Java являются неизменяемыми!) Что наreplace
самом деле делает, так это создает и возвращает новыйString
объект с измененными символами по мере необходимости. Но ваш код затем выбрасывает этоString
...Вот несколько возможных решений. Какой из них наиболее правильный, зависит от того, что именно вы пытаетесь сделать.
Просто удаляет все символы новой строки. Это не справляется с завершением строки Windows или Mac.
Удаляет все ограничители строки для текущей платформы. Это не относится к случаю, когда вы пытаетесь обработать (например) файл UNIX в Windows или наоборот.
Удаляет все разделители строк в Windows, UNIX или Mac. Однако, если входной файл является текстом, это объединит слова; например
становится
Таким образом, вы можете сделать это:
который заменяет каждый терминатор строки пробелом. Начиная с Java 8 вы также можете сделать это:
И если вы хотите заменить несколько разделителей строк одним пробелом:
источник
Если вы хотите удалить только ограничители строки, которые действительны в текущей ОС, вы можете сделать это:
Если вы хотите убедиться, что удалили разделители строк, вы можете сделать это следующим образом:
Или, немного более многословный, но менее регулярный:
источник
text.replaceAll("(\\r|\\n)+", " ")
и (предполагая, что в Java по умолчанию используется жадность?), У вас будет решение с одним пробелом для каждой последовательности новых строковых символов.Эта функция нормализует все пробелы, включая разрывы строк, до одиночных пробелов. Не совсем то, о чем просил первоначальный вопрос, но, скорее всего, во многих случаях он будет делать именно то, что нужно:
источник
Я думаю, это будет эффективно
источник
Сработал отлично для меня после долгих поисков, потерпев неудачу с любой другой строкой.
источник
Разрывы строк не совпадают в Windows / Linux / Mac. Вы должны использовать System.getProperties с атрибутом line.separator.
источник
.replace возвращает новую строку, строки в Java неизменны.
источник
Вы можете прочитать ваш файл с помощью
BufferedReader
. Этот класс может разбивать ввод на отдельные строки, которые вы можете собрать по желанию. Способ работыBufferedReader
распознает соглашения о конце строк в мире Linux, Windows и MacOS независимо от текущей платформы.Следовательно:
Обратите внимание, что
readLine()
в возвращаемую строку не входит терминатор строки. Код выше добавляет пробел, чтобы избежать склеивания последнего слова строки и первого слова следующей строки.источник
Хотя определение trim () на веб-сайте oracle гласит: «Возвращает копию строки, пропуская начальные и конечные пробелы».
в документации не сказано, что символы новой строки (начальные и конечные) также будут удалены.
Короче и у
String text = readFileAsString("textfile.txt").trim();
тебя тоже будет работать. (Проверено с Java 6)источник
Я нахожу странным, что (Apache) StringUtils здесь еще не освещался.
Вы можете удалить все новые строки (или любые другие вхождения подстроки по этому вопросу) из строки, используя
.replace
методЭта строка заменит все новые строки пустой строкой.
потому что символ новой строки технически является символом, вы можете использовать
.replaceChars
метод, который заменит символыисточник
StringUtils.replaceEachRepeatedly(myString, new String[]{"\n", "\t"}, new String[]{StringUtils.Empty, StringUtils.Empty});
К вашему сведению, если вы хотите заменить одновременные разрывы строк на один раз, тогда вы можете использовать
Или заменить на один пробел
источник
Вы можете использовать apache commons IOUtils для перебора строки и добавления каждой строки в StringBuilder. И не забудьте закрыть InputStream
источник
Вы можете использовать универсальные методы для замены любого символа любым другим.
источник
org.apache.commons.lang.StringUtils # chopNewline
источник
Попробуйте сделать это:
источник
\n
то больше\r\n
не будет, если вы замените \ n, и есть \\ n, он будет заменен, поэтому останется только \.