2012-04-29 4 views
5

Z javadocczytanie w BufferedReader

public String readLine() 
      throws IOException 

Read a line of text. A line is considered to be terminated by any one of a line feed ('\n'), a carriage return ('\r'), or a carriage return followed immediately by a linefeed. 

Mam następujący rodzaj tekstu:

Now the earth was formless and empty. Darkness was on the surface 
of the deep. God's Spirit was hovering over the surface 
of the waters. 

czytam wiersze jak:

while(buffer.readline() != null){ 
     } 

ale problemem jest to rozważa linię dla string upto przed newline. Ale chciałbym rozważyć linię, gdy łańcuch kończy się na .. Jak mógłbym to zrobić?

Odpowiedz

5

można odczytać znak naraz, a następnie skopiować dane do StringBuilder

Reader reader = ...; 
StringBuilder sb = new StringBuilder(); 
int ch; 
while((ch = reader.read()) >= 0) { 
    if(ch == '.') break; 
    sb.append((char) ch); 
} 
4
  • Skorzystaj z java.util.Scanner zamiast buforowanego czytnika i ustaw ogranicznik do "\\." z Scanner.useDelimiter(). (ale należy pamiętać, że separator jest zużywana, więc trzeba go dodać ponownie!)
  • lub przeczytać ciąg surowego i podzielić ją na każdym .
4

Można podzielić cały tekst każdego .:

String text = "Your test."; 
String[] lines = text.split("\\."); 

Po podzieleniu tekstu otrzymujesz tablicę linii. Możesz również użyć wyrażenia regularnego, jeśli chcesz uzyskać większą kontrolę, np. aby podzielić tekst również przez : lub ;. Po prostu wyszukaj to w Google.

PS .: Może trzeba usunąć znaki nowego wiersza pierwszy z czymś takim:

text = text.replaceAll("\n", ""); 
7

Można użyć Scanner i ustawić własny separator użyciu useDelimiter(Pattern).

Zauważ, że ogranicznik wejściowy jest regex, więc trzeba będzie dostarczyć regex \. (trzeba przełamać specjalne znaczenie znaku . w regex)