Come rimuovere le nuove righe dall'inizio e dalla fine di una stringa?


Risposte:


277

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

18
La domanda riguarda le newline. Questo rimuove più di semplici newline
mmm

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

14
Bro, @JohnB Rimuoverà anche tutto il nuovo carattere di linea tra la stringa. la richiesta è di rimuovere solo il carattere di nuova riga iniziale e finale.
siddhartha,

5

tl; dr

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

String::strip…

Il vecchio String::trimmetodo ha una strana definizione di spazi bianchi .

Come discusso qui , Java 11 aggiunge nuovi strip…metodi alla Stringclasse. 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:

  • È un carattere spazio Unicode (SPACE_SEPARATOR, LINE_SEPARATOR o PARAGRAPH_SEPARATOR) ma non è anche uno spazio non-break ('\ u00A0', '\ u2007', '\ u202F').
  • È '\ t', U + 0009 TABULAZIONE ORIZZONTALE.
  • È '\ n', U + 000A LINE FEED.
  • È '\ u000B', U + 000B TABULAZIONE VERTICALE.
  • È '\ f', U + 000C FORM FEED.
  • È '\ r', U + 000D RITORNO DEL CARRELLO.
  • È '\ u001C', SEPARATORE DI FILE U + 001C.
  • È '\ u001D', SEPARATORE DI GRUPPO U + 001D.
  • È '\ u001E', U + 001E RECORD SEPARATOR.
  • È '\ u001F', U + 0

4

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

Potresti fornire un contesto extra alla tua risposta? In questo modo tutti possono capire cosa fa il tuo codice e perché.
Mariano Zorrilla,

Ho aggiunto spiegazioni alla mia risposta. Spero che ora sia chiaro.
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. Inizio di una stringa = ^,
  2. Fine di una stringa = $,
  3. combinazione regex = | ,
  4. Interruzione di riga = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

0

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.


Sì ma cosa succede se non sai quante righe ci sono all'inizio / alla fine? La tua soluzione presuppone che ci siano esattamente 2 newline in entrambi i casi
Luka Govedič,

Il secondo parametro di split()è solo il limite. Lascialo spento se vuoi abbinare un numero illimitato di volte.
Zhro,

0

Prova questo

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

0

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<

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

2
Questo non risponde correttamente alla domanda. Elimina tutti i CR e gli LF, non solo quelli all'inizio e alla fine.
james.garriss,

Questo sostituirà tutto, non solo dall'inizio e dalla fine.
Hamzeh Soboh,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.