Как удалить разрывы строки из файла в Java?

Как я могу заменить все разрывы строки от строки в Java таким способом, который будет работать над Windows и Linux (т.е. никакая ОС определенные проблемы возврата каретки / канал/новая строка строки и т.д.)?

Я попробовал (обратите внимание, что readFileAsString является функцией, которая читает текстовый файл в Строку):

String text = readFileAsString("textfile.txt");
text.replace("\n", "");

но это, кажется, не работает.

Как это может быть сделано?

247
задан tree-hacker 10 August 2011 в 03:32
поделиться

6 ответов

Стоп звуки эквивалентны для использования модуля модуля . .RESET не имеет эквивалента в Python, не хватает безвозмездного использования del .

-121--3690521-

Вам нужно установить Text к результатам Text.replace () :

String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

Это необходимо, потому что строки неизменяются - вызывая Заменить не изменяет исходную строку, она возвращает новый, который был изменен. Если вы не назначаете результат к тексту , то эта новая строка потеряна, и собрал мусор.

Что касается получения новой строки для любой среды - которая доступна по вызове System.getProperty («Line.separator) .

407
ответ дан 23 November 2019 в 03:00
поделиться

Линейные разряды не одинаковы под Windows / Linux / Mac. Вы должны использовать System.getProperties с атрибутом Line.Separator.

6
ответ дан 23 November 2019 в 03:00
поделиться
String text = readFileAsString("textfile.txt").replace("\n","");

. Задача возвращает новую строку, строки в Java неизменяются.

3
ответ дан 23 November 2019 в 03:00
поделиться

Если вы хотите удалить только линейные терминаторы, которые действительны в текущей ОС, вы можете сделать это:

text = text.replaceAll(System.getProperty("line.separator"), "");

Если вы хотите убедиться, что вы удалите любые сепараторы строки, вы можете сделать это Вроде это:

text = text.replaceAll("\\r|\\n", "");

или чуть более многословных, но меньше регулярных:

text = text.replaceAll("\\r", "").replaceAll("\\n", "");
21
ответ дан 23 November 2019 в 03:00
поделиться

Джошуа Блох (признанный эксперт по Java) на самом деле рекомендует такой подход в своей книге Effective Java 2nd Edition на стр. 17. конструктор или перечислительный тип.

-121--2995526-

Существует свободный продукт ETL, который можно использовать для миграции данных из одной базы данных в другую. Посмотрите: http://www.talend.com/index.php

Удачи!

-121--4013421-

Вы можете прочитать файл с помощью BufferedReader . Этот класс может разбивать ввод на отдельные строки, которые можно собирать по желанию. Способ работы BufferedReader автоматически распознает соглашения об окончании строк в мире Linux, Windows и MacOS независимо от текущей платформы.

Следовательно:

BufferedReader br = new BufferedReader(
    new InputStreamReader("textfile.txt"));
StringBuilder sb = new StringBuilder();
for (;;) {
    String line = br.readLine();
    if (line == null)
        break;
    sb.append(line);
    sb.append(' ');   // SEE BELOW
}
String text = sb.toString();

Обратите внимание, что readLine () не включает признак конца строки в возвращаемый ряд. Приведенный выше код добавляет космос, чтобы избежать склеивания последнего слова строки и первого слова следующей строки.

3
ответ дан 23 November 2019 в 03:00
поделиться

Как отмечено в других ответах, Ваш код не работает в первую очередь , потому что String.replace(...) не изменяет цель String. (Не может - строки Java неизменны!) Что на самом деле делает replace, так это создает и возвращает новый объект String, при этом символы меняются по мере необходимости. Но ваш код затем выбрасывает, что Строка ...


Вот несколько возможных решений. Какое из них наиболее верно, зависит от того, что именно Вы пытаетесь сделать.

// #1
text = text.replace("\n", "");

Просто удаляет все символы новой строки. Это не справляется с завершением строки в Windows или Mac.

// #2
text = text.replace(System.getProperty("line.separator"), "");

Удаляет все терминаторы строк для текущей платформы. Это не справляется с тем случаем, когда Вы пытаетесь обработать (например) UNIX-файл под Windows, или наоборот.

// #3
text = text.replaceAll("\\r|\\n", "");

Удаляются все терминаторы линии для Windows, UNIX или Mac. Однако, если входной файл является текстовым, то это приводит к конкатенциации слов; например,

Goodbye cruel
world.

становится

Goodbye cruelworld.

Так что, на самом деле, вы можете захотеть сделать следующее:

// #4
text = text.replaceAll("\\r\\n|\\r|\\n", " ");

который заменяет каждый терминатор строки пробелом. Начиная с Java 8 вы также можете сделать это:

// #5
text = text.replaceAll("\\R", " ");

И если вы хотите заменить несколько разделителей строк одним пробелом:

// #6
text = text.replaceAll("\\R+", " ");
207
ответ дан 23 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: