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?
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?
Respuestas:
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();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
El viejo String::trim
método tiene una extraña definición de espacio en blanco .
Como se discutió aquí , Java 11 agrega nuevos strip…
métodos a la String
clase. 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
:
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]", "")
Si su cadena es potencialmente null
, considere usar StringUtils.trim()
- la versión nula-segura de String.trim()
.
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])$", "") + "]");
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.
split()
es solo el límite. Déjalo apagado si quieres igualar un número ilimitado de veces.
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<
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");