2009-02-27 13 views

risposta

4

dato uno str String:

str = str.replaceAll("\\\\r","") 
str = str.replaceAll("\\\\n","") 
+0

Zounds. Bastonatemi! –

+2

Questo è un modo inutilmente inefficiente di farlo. –

2

Hai provato a usare il metodo replaceAll per sostituire qualsiasi occorrenza di \ n \ r o con la stringa vuota?

110

Regex con replaceAll.

public class Main 
{ 
    public static void main(final String[] argv) 
    { 
     String str; 

     str = "hello\r\njava\r\nbook"; 
     str = str.replaceAll("(\\r|\\n)", ""); 
     System.out.println(str); 
    } 
} 

Se si desidera rimuovere \ r \ n quando sono le coppie (il codice di cui sopra libera in \ r \ n) do questo, invece:

str = str.replaceAll("\\r\\n", ""); 
+8

Si consiglia di utilizzare 'System.getProperty (" line.separator ");', anziché gli interruttori di linea hardcoded. Ogni sistema operativo ha il proprio separatore di riga. – GGrec

+2

Anche io, ma la domanda utilizzava in modo specifico \ r e \ n ... – TofuBeer

+2

@GGrec a volte il testo String/File non è stato creato dallo stesso sistema operativo. Quindi 'System.getProperty (" line.separator ");' non funzionerà in questi casi. Ma sì, se puoi fidarti dell'origine dello stesso OS, è meglio usare la proprietà di sistema. – Mindwin

10

Se si vuole evitare il regex, o devono indirizzare una precedente JVM, String.replace() farà:

str=str.replace("\r","").replace("\n",""); 

e per rimuovere una coppia CRLF:

str=str.replace("\r\n",""); 

Quest'ultimo è più efficiente della costruzione di un'espressione regolare per fare la stessa cosa. Ma penso che il primo sarà più veloce come regex poiché la stringa viene analizzata solo una volta.

1
static byte[] discardWhitespace(byte[] data) { 
    byte groomedData[] = new byte[data.length]; 
    int bytesCopied = 0; 

    for (int i = 0; i < data.length; i++) { 
     switch (data[i]) { 
      case (byte) '\n' : 
      case (byte) '\r' : 
       break; 
      default: 
       groomedData[bytesCopied++] = data[i]; 
     } 
    } 

    byte packedData[] = new byte[bytesCopied]; 

    System.arraycopy(groomedData, 0, packedData, 0, bytesCopied); 

    return packedData; 
} 

Codice trovato sul progetto Commons-codec.

-5

Hai provato

string.trim(); 

Questo è lo scopo di tagliare tutti i leader e appoggia mentre gli spazi nella stringa. Spero che questo ti aiuti.

Edit: (I non era abbastanza esplicito)

Così, quando si String.split(), si avrà una string [] - per ciascuna delle stringhe nella matrice, fare uno string.trim () e quindi aggiungerlo.

String[] tokens = yourString.split(" "); 
StringBuffer buff = new StringBuffer(); 
for (String token : tokens) 
{ 
    buff.append(token.trim()); 
} 

Utilizzare stringBuffer/Builder invece di accodare nella stessa stringa.

+0

Qual è il problema qui? Trim elimina tutto e restituisce solo la stringa? –

+4

Trim rimuove gli spazi bianchi iniziali/finali. Le interruzioni di riga nel mezzo di una stringa non verranno rimosse. – Joseph

9
public static void main(final String[] argv) 
{ 
    String str; 

    str = "hello\r\n\tjava\r\nbook"; 
    str = str.replaceAll("(\\r|\\n|\\t)", ""); 
    System.out.println(str); 
} 

Sarebbe utile aggiungere anche la tabulazione in regex.