2016-10-29 3 views
2

Ich habe eine Datei, die etwas Text und am Ende eine Nummer enthält. Die Datei ist wie folgt:Lesen Sie eine Datei und gruppieren Sie ihren Text

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 

Was ich will ist, den gesamten Text bis zur Nummer zu gruppieren. Beispiel:

" 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" 

Ich bemerkte, dass jede Textgruppe mit Leerzeichen beginnt. Allerdings habe ich Schwierigkeiten, sie zu gruppieren. Ich codiert dies:

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

Eigentlich nur Sie die Linien mit einem weißen Raum auf der Vorderseite auf die „Linien“ Arraylist direkt hinzufügen ?. Also zB. _the firebrand 14852520_ sollte nicht im Array richtig? Vielleicht versuche es mit einem Index. Daher werden alle Zeilen zwischen zwei Leerzeichen einem Index hinzugefügt. Erhöhen Sie den Index, wenn eine Zeile mit einem Leerzeichen beginnt. – theoretisch

Antwort

1

Sie diesen Algorithmus folgen könnte:

  • Erstellen Sie einen leeren Puffer
  • Für jede Zeile:
    • Anfügen an den Puffer
    • Wenn die Leitungsenden mit einer Nummer:
    • Fügen Sie den Puffer zur Liste hinzu
    • Leeren der Puffer

Etwas wie folgt aus:

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

es funktioniert! groß! Kannst du mir aber erklären, was ist '. * \\ d + $'? – yaylitzis

+0

Es ist ein regulärer Ausdruck. '\\ d +' bedeutet eine oder mehrere Ziffern, '$' bedeutet am Ende der Datei, und '. *' bedeutet irgendeine Zahl irgendeines Zeichens. – janos

Verwandte Themen