Регулярные выражения и новые строки
Я пытаюсь поделить случайное 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)