Ho una stringa che contiene del testo seguito da una riga vuota. Qual è il modo migliore per mantenere la parte con il testo, ma rimuovere lo spazio vuoto dalla fine?
Ho una stringa che contiene del testo seguito da una riga vuota. Qual è il modo migliore per mantenere la parte con il testo, ma rimuovere lo spazio vuoto dalla fine?
Risposte:
Usa il String.trim()
metodo per sbarazzarti degli spazi bianchi (spazi, nuove linee, ecc.) Dall'inizio e dalla fine della stringa.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
Il vecchio String::trim
metodo ha una strana definizione di spazi bianchi .
Come discusso qui , Java 11 aggiunge nuovi strip…
metodi alla String
classe. Questi usano una definizione più esperta di Unicode di spazio bianco. Vedi le regole di questa definizione nella classe JavaDoc per Character::isWhitespace
.
Codice di esempio
String input = " some Thing ";
System.out.println("before->>"+input+"<<-");
input = input.strip();
System.out.println("after->>"+input+"<<-");
Oppure puoi rimuovere solo lo spazio bianco iniziale o finale .
Non menzioni esattamente quali punti di codice compongono le tue nuove righe. Immagino che la tua newline sia probabilmente inclusa in questo elenco di punti di codice presi di mira da strip
:
Questo codice Java fa esattamente ciò che viene chiesto nel titolo della domanda, ovvero "rimuovere le nuove righe dall'inizio e dalla fine di una stringa-java":
String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")
Rimuovi le nuove righe solo dalla fine della riga:
String.replaceAll("[\n\r]$", "")
Rimuovi le nuove righe solo dall'inizio della riga:
String.replaceAll("^[\n\r]", "")
Se la tua stringa è potenzialmente null
, considera l'utilizzo di StringUtils.trim()
- la versione null-safe di 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])$", "") + "]");
Aggiungerò una risposta anche a questo perché, sebbene avessi la stessa domanda, la risposta fornita non era sufficiente. Considerato il pensiero, mi sono reso conto che questo può essere fatto molto facilmente con un'espressione regolare.
Per rimuovere le nuove righe dall'inizio:
// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);
System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");
e fine di una stringa:
// Trim right
String z = "\n\nfrom the end\n\n";
System.out.println("-" + z.split("\\n+$", 2)[0] + "-");
Sono certo che questo non è il modo più efficiente per tagliare una corda. Ma sembra essere il modo più semplice e pulito per integrare tale operazione.
Si noti che lo stesso metodo può essere fatto per tagliare qualsiasi variazione e combinazione di caratteri da entrambe le estremità in quanto è una regex semplice.
split()
è solo il limite. Lascialo spento se vuoi abbinare un numero illimitato di volte.
Se si desidera rimuovere solo le interruzioni di riga (non spazi, tabulazioni) all'inizio e alla fine di una stringa (non in mezzo), è possibile utilizzare questo approccio:
Usa le espressioni regolari per rimuovere i ritorni a capo ( \\r
) e i feed di riga ( \\n
) dall'inizio ( ^
) e finale ( $
) di una stringa:
s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")
Esempio 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+"<");
}
}
Emette:
before: >
Hello
World
<
after: >Hello
World<
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");