2009-02-27 6 views

Respuesta

4

dado un String str:

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

Zounds. ¡Pásame! –

+2

Esta es una manera innecesariamente ineficiente de hacerlo. –

2

¿Ha intentado utilizar el método replaceAll para reemplazar cualquier aparición de \ no \ r con la cadena vacía?

110

Regex con replaceTodo.

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); 
    } 
} 

Si sólo desea eliminar \ r \ n cuando son pares (el código anterior elimina ya sea \ n \ r o) hacer esto en su lugar:

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

Yo recomendaría que usara 'System.getProperty (" line.separator ");', en lugar de interruptores de línea codificados. Cada sistema operativo tiene su propio separador de línea. – GGrec

+2

Yo también, pero la pregunta utilizó específicamente el \ r \ n ... \ n ... – TofuBeer

+2

@GGrec a veces el texto String/File no fue creado por el mismo sistema operativo. Entonces 'System.getProperty (" line.separator ");' no funcionará en estos casos. Pero sí, si puede confiar en el mismo origen de sistema operativo, es mejor usar la propiedad del sistema. – Mindwin

10

Si se quiere evitar la expresiones regulares, o debe apuntar a una JVM anterior, String.replace() harán:

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

y de quitar un par CRLF:

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

Esto último es más eficiente que construir una expresión regular para hacer lo mismo. Pero creo que el primero será más rápido como expresión regular, ya que la cadena solo se analiza una vez.

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; 
} 

El código encontró en el proyecto commons-codec.

-5

¿Usted intentó

string.trim(); 

Esta es la intención de recortar todo lo cual lleva y que se inclina mientras que los espacios en la cadena. Espero que esto ayude.

Editar: (yo no era lo suficientemente explícito)

Así, cuando string.split(), tendrá una cadena [] - para cada una de las cadenas de la matriz, hacer un string.trim () y luego añádalo.

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

Utilice stringBuffer/Builder en lugar de anexar en la misma cadena.

+0

¿Cuál es el problema aquí? Trim quita todo y devuelve solo la cuerda? –

+4

Trim elimina el espacio en blanco inicial/final. Los saltos de línea en el medio de una cadena no se eliminarán. – 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); 
} 

Sería útil agregar la tabulación en expresiones regulares también.

Cuestiones relacionadas