2012-04-29 18 views
5

Dal javadoclettura 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. 

Ho seguito tipo di testo:

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. 

sto leggendo come linee:

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

Ma, il problema è sta prendendo in considerazione una linea per la stringa upto prima di newline.Ma vorrei prendere in considerazione la riga quando la stringa termina con .. Come lo farei?

risposta

5

si può leggere un carattere alla volta, e copiare i dati in uno StringBuilder

Reader reader = ...; 
StringBuilder sb = new StringBuilder(); 
int ch; 
while((ch = reader.read()) >= 0) { 
    if(ch == '.') break; 
    sb.append((char) ch); 
} 
4
  • Utilizzare un java.util.Scanner invece di un lettore di buffer, e impostare il delimitatore per "\\." con Scanner.useDelimiter(). (ma essere consapevoli che il delimitatore si consuma, quindi dovrete aggiungere di nuovo!)
  • o leggere la stringa crudo e divisi su ogni .
4

Si potrebbe dividere l'intero testo di ogni .:

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

Dopo la suddivisione del testo si ottiene una serie di linee. Puoi anche utilizzare una regex se desideri un maggiore controllo, ad es. per dividere il testo anche per : o ;. Basta google.

PS .: Forse è necessario rimuovere i caratteri di nuova riga prima con qualcosa di simile:

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

È possibile utilizzare un Scanner e impostare il proprio delimitatore utilizzando useDelimiter(Pattern).

Si noti che il delimitatore di ingresso è un regex, quindi sarà necessario fornire il regex \. (è necessario rompere il significato speciale del carattere . in regex)

Problemi correlati