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


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

18
La pregunta es sobre nuevas líneas. Esto elimina más que solo nuevas líneas
mmm

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

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

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]", "")

¿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]

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.


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

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<

-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.