2016-10-29 10 views
2

У меня есть файл, который содержит текст и в конце число. Файл подобен:Прочитать файл и сгруппировать его текст

to Polyxena. Achilles appears in the in the novel The Firebrand by Marion 
the firebrand 14852520 
fantasy novelist David Gemmell omic book hero Captain Marvel is endowed with the courage of Achilles, as well 
captain marvel 403585 
the city its central theme and 
corfu 45462 

Я хочу, чтобы сгруппировать весь текст до номера. Например:

" to Polyxena. Achilles appears in the in the novel The Firebrand by Marion the firebrand 14852520" 

" fantasy novelist David Gemmell omic book hero Captain Marvel is endowed with the courage of Achilles, as well captain marvel 403585" 

Я заметил, что каждая группа текста начинается с пробела. Однако мне сложно сгруппировать их. Я закодирован следующим образом:

String line; 
String s = " "; 
char whiteSpace = s.charAt(0); 

ArrayList<String> lines = new ArrayList<>(); 
BufferedReader in = new BufferedReader(new FileReader(args[0])); 
while((line = in.readLine()) != null) 
{ 
    if (whiteSpace == line.charAt(0)){ //start of sentence 
     lines.add(line);    
    } 
} 
in.close(); 
+0

На самом деле вы только добавить строки с пробелами на фронте к «линии» ArrayList, не так ли ?. Так, например. _ firebrand 14852520_ не должен в массиве правильно? Возможно, попробуйте с индексом. Таким образом, все строки между двумя пробелами добавляются к одному индексу. Увеличьте индекс, если строка начинается с пробела. – theoretisch

ответ

1

Вы могли бы следовать этому алгоритму:

  • Создать пустой буфер
  • Для каждой строки:
    • Append в буфер
    • Если концы линии с номером:
    • Добавить буфер в список
    • Пустой буфер

Что-то вроде этого:

String text = " to Polyxena. Achilles appears in the in the novel The Firebrand by Marion \n" + 
     "the firebrand 14852520\n" + 
     " fantasy novelist David Gemmell omic book hero Captain Marvel is endowed with the courage of Achilles, as well \n" + 
     "captain marvel 403585\n" + 
     " the city its central theme and \n" + 
     "corfu 45462"; 
Scanner scanner = new Scanner(text); 

List<String> lines = new ArrayList<>(); 
StringBuilder buffer = new StringBuilder(); 

while (scanner.hasNext()) { 
    String line = scanner.nextLine(); 
    buffer.append(line); 
    if (line.matches(".*\\d+$")) { 
     lines.add(buffer.toString()); 
     buffer.setLength(0); 
    } 
} 
+0

он работает! Великий! однако, можете ли вы объяснить мне, что такое '. * \\ d + $'? – yaylitzis

+0

Это регулярное выражение. '\\ d +' означает одну или несколько цифр, '$' означает в конце файла, а '. *' означает любое количество символов. – janos