Регулярные выражения и новые строки

Я пытаюсь поделить случайное file.txt в String[], Текст приходит из Gutenberg.org и имеет много новых линий.

Пример:

Проект Гутенберга Электронная книга писем Линкольна, автор Авраам Линкольн

Эта электронная книга предназначена для использования кем угодно и где угодно и практически без ограничений. Вы можете скопировать его, отдать или использовать повторно в соответствии с условиями лицензии Project Gutenberg, прилагаемой к этой электронной книге, или через Интернет по адресу www.gutenberg.org.

Название: Письма Линкольна

Вывод корректен для каждого слова, но не для слов, заканчивающих абзацы и начинающих абзацы.

Например, "Lincolnhis", который является комбинацией "Lincoln" и "This", но рассматривается как одно слово. Вместо этого я хотел бы иметь "Линкольн" и "Это".

token = word.split("\\s|\\.|\\,"); Это регулярное выражение, которое я использую для разделения текстового файла. Пожалуйста помоги.

Вот код, который я использую для ввода текстового файла:

    FileReader fr = new FileReader("C:\\Users\\Petr Holoubek\\Desktop\\hello world.txt");
    BufferedReader br = new BufferedReader(fr); 

    String[] tokens;
    String temp;
    int i;

    i = 0;
    temp = "";
    while((i=br.read()) != -1) {
        temp = temp + br.readLine();
    }

А вот собственно токенизация:

public String[] tokenize(String word){
//divides the input by non-char symbol and
//puts tokens into state hashmap as keys
    String[] token;

    token = word.split("\\s|\\.|\\,");  
    return token;
}

Большое спасибо за Вашу помощь!

1 ответ

Решение

Вы, вероятно, читаете файл с помощью BufferedReader.readLine, который отбрасывает символы новой строки, отделяющие одну строку от следующей, и затем объединяет эти строки, что склеивает конец каждой строки с началом следующей.

Вы, вероятно, делаете что-то вроде этого:

String str = "";
while(true) {
    String next = bufferedReader.readline();
    if(next == null) break;
    str += next;
}

Не используйте readline, используйте read(char[] cbuf, int off, int len)

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