¿Cómo eliminar las nuevas líneas desde el principio y el final de una cadena?

129

Tengo una cadena que contiene texto seguido de una línea en blanco. ¿Cuál es la mejor manera de mantener la parte con texto, pero eliminar la nueva línea de espacios en blanco del final?

Confiquir
fuente
1
No, no es. La pregunta en el enlace es preguntar sobre 'reemplazar' más bien ...
Faiz

Respuestas:

277

Utilice el String.trim()método para eliminar espacios en blanco (espacios, líneas nuevas, etc.) desde el principio y el final de la cadena.

String trimmedString = myString.trim();
Crozin
fuente
18
La pregunta es sobre nuevas líneas. Esto elimina más que solo nuevas líneas
mmm
21
String.replaceAll("[\n\r]", "");
John B
fuente
14
Bro, @JohnB También eliminará todos los nuevos caracteres de línea entre la cadena. la pregunta es eliminar solo el carácter de línea nueva inicial y final.
siddhartha
5

tl; dr

String cleanString = dirtyString.strip() ; // Call new `String::string` method.

String::strip…

El viejo String::trimmétodo tiene una extraña definición de espacio en blanco .

Como se discutió aquí , Java 11 agrega nuevos strip…métodos a la Stringclase. Estos usan una definición de espacio en blanco más inteligente para Unicode. Consulte las reglas de esta definición en la clase JavaDoc para Character::isWhitespace.

Código de ejemplo

String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");

O puede eliminar solo el espacio en blanco inicial o posterior .

No menciona exactamente qué punto (s) de código componen sus líneas nuevas. Me imagino que su nueva línea probablemente esté incluida en esta lista de puntos de código a los que apunta strip:

  • Es un carácter de espacio Unicode (SPACE_SEPARATOR, LINE_SEPARATOR o PARAGRAPH_SEPARATOR) pero no es también un espacio que no se rompe ('\ u00A0', '\ u2007', '\ u202F').
  • Es '\ t', U + 0009 TABULACIÓN HORIZONTAL.
  • Es '\ n', U + 000A LINE FEED.
  • Es '\ u000B', U + 000B TABULACIÓN VERTICAL.
  • Es '\ f', U + 000C FORM FEED.
  • Es '\ r', U + 000D CARRIAGE RETURN.
  • Es '\ u001C', SEPARADOR DE ARCHIVOS U + 001C.
  • Es '\ u001D', SEPARADOR DE GRUPO U + 001D.
  • Es '\ u001E', SEPARADOR DE REGISTRO U + 001E.
  • Es '\ u001F', U + 0
Albahaca Bourque
fuente
4

Este código Java hace exactamente lo que se pide en el título de la pregunta, es decir, "eliminar nuevas líneas desde el principio y el final de un string-java":

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

Elimine las nuevas líneas solo desde el final de la línea:

String.replaceAll("[\n\r]$", "")

Elimine las nuevas líneas solo desde el principio de la línea:

String.replaceAll("^[\n\r]", "")
Alexander Samoylov
fuente
¿Podría proporcionar un contexto adicional a su respuesta? De esa manera, todos pueden entender lo que hace su código y por qué.
Mariano Zorrilla
He agregado explicaciones a mi respuesta. Espero que ahora esté claro.
Alexander Samoylov
1
String trimStartEnd = "\n TestString1 linebreak1\nlinebreak2\nlinebreak3\n TestString2 \n";
System.out.println("Original String : [" + trimStartEnd + "]");
System.out.println("-----------------------------");
System.out.println("Result String : [" + trimStartEnd.replaceAll("^(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])|(\\r\\n|[\\n\\x0B\\x0C\\r\\u0085\\u2028\\u2029])$", "") + "]");
  1. Inicio de una cadena = ^,
  2. Fin de una cadena = $,
  3. combinación de expresiones regulares = | ,
  4. Salto de línea = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]
hmmh
fuente
0

Voy a agregar una respuesta a esto también porque, aunque tenía la misma pregunta, la respuesta proporcionada no fue suficiente. Después de pensarlo un poco, me di cuenta de que esto se puede hacer muy fácilmente con una expresión regular.

Para eliminar nuevas líneas desde el principio:

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

y final de una cadena:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

Estoy seguro de que esta no es la forma más eficiente de recortar una cadena. Pero parece ser la forma más limpia y sencilla de alinear dicha operación.

Tenga en cuenta que se puede hacer el mismo método para recortar cualquier variación y combinación de caracteres de cualquier extremo, ya que es una expresión regular simple.

Zhro
fuente
Sí, pero ¿y si no sabes cuántas líneas hay al principio / al final? Su solución asume que hay exactamente 2 nuevas líneas en ambos casos
Luka Govedič
El segundo parámetro de split()es solo el límite. Déjalo apagado si quieres igualar un número ilimitado de veces.
Zhro
0

Prueba esto

function replaceNewLine(str) { 
  return str.replace(/[\n\r]/g, "");
}
Jobelle
fuente
0

Si solo desea eliminar saltos de línea (no espacios, pestañas) al principio y al final de una Cadena (no en el medio), puede usar este enfoque:

Use expresiones regulares para eliminar retornos de carro ( \\r) y avances de línea ( \\n) desde el principio ( ^) y el final ( $) de una cadena:

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

Ejemplo completo:

public class RemoveLineBreaks {
    public static void main(String[] args) {
        var s = "\nHello\nWorld\n";
        System.out.println("before: >"+s+"<");
        s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "");
        System.out.println("after: >"+s+"<");
    }
}

Produce:

before: >
Hello
World
<
after: >Hello
World<
slartidan
fuente
-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
Kan
fuente
2
Esto no responde correctamente la pregunta. Elimina todos los CR y LF, no solo los del principio y el final.
james.garriss
Esto reemplazará todo, no solo desde el principio y el final.
Hamzeh Soboh