Come rimuovere i ritorni a capo, dall’inizio e la fine di una stringa (Java)?

Ho una stringa che contiene il testo seguita da una riga vuota. Qual è il modo migliore per mantenere la parte con il testo, ma rimuovere gli spazi vuoti newline dalla fine?

InformationsquelleAutor Confiqure | 2011-09-17

 

7 Replies
  1. 246

    Utilizzare Stringa.trim() metodo per sbarazzarsi di spazi (spazi, nuove linee, etc.) all’inizio e alla fine della stringa.

    String trimmedString = myString.trim();
    • Se si vuole sbarazzarsi di, diciamo, ogni interruzione di riga, è possibile utilizzare le espressioni regolari.
    • Le espressioni regolari?
    • Sì, uso la Stringa.replaceAll
    • La domanda è punto e a capo. Questo rimuove più di punto e a capo
  2. 24
    String.replaceAll("[\n\r]", "");
    • Ah, l’inizio e la fine. Vedo, ho visto il commento su sbarazzarsi di “ogni interruzione di riga” e ha risposto che. Mea Culpa
    • Questo funziona perfettamente per il mio una linea di scenario. Grazie.
    • Bro, @JohnB rimuove tutto il carattere di nuova riga tra la stringa così. il chiedere è quello di rimuovere solo il primo & finali carattere di nuova riga.
    • Bro, @siddharta, lo dico nel commento al post di 6 anni fa
    • Stai attento se il ciclo. Questo sarà necessario compilare la regex su ogni chiamata.
  3. 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. regex combinazione = | ,
    4. Linebreak = \r\n|[\n\x0B\x0C\r\u0085\u2028\u2029]
  4. 0

    Ho intenzione di aggiungere una risposta a questo, perché, mentre io avevo la stessa domanda la risposta non è sufficiente. Dato qualche pensiero, mi sono reso conto che questo può essere fatto molto facilmente con una espressione regolare.

    Per rimuovere a capo, 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 la 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 più prestazioni in modo efficiente per il taglio di una stringa. Ma non sembra essere il più pulito e più semplice modo per inline tale operazione.

    Nota che il metodo stesso può essere fatto per tagliare qualsiasi variazione e la combinazione di caratteri da entrambe le estremità, in quanto è una semplice espressione regolare.

    • Sì, ma che cosa se non sai come molte linee sono all’inizio/fine? La tua soluzione si presume ci sono esattamente 2 a capo, in entrambi i casi
    • Il secondo parametro di split() è solo il limite. Lasciare fuori se si desidera abbinare un numero illimitato di volte.
  5. 0

    tl;dr

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

    String::strip…

    Vecchio String::trim metodo ha un strana definizione di gli spazi.

    Come discusso qui, Java 11 aggiunge nuove striscia... metodi per la String classe. Questi di utilizzare un più Unicode-savvy definizione di spazi vuoti. Vedere le regole di questa definizione in classe JavaDoc per di Caratteri::isWhitespace.

    Codice di esempio.

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

    O si può togliere solo il leader o solo il finale spazi vuoti.

    Non ricordare esattamente ciò che code point(s) fare la tua punto e a capo. Immagino che il tuo capo è probabilmente inclusi in quest’elenco di punti di codice di mira da strip:

    • È una Unicode del carattere di spazio (SPACE_SEPARATOR, LINE_SEPARATOR, o PARAGRAPH_SEPARATOR), ma non è anche uno spazio unificatore (‘\u00A0’, ‘\u2007’, ‘\u202F’).
    • È ‘\t’, U+0009 TABULAZIONE ORIZZONTALE.
    • È ‘\n’, U+000A LINEA di ALIMENTAZIONE.
    • È ‘\u000B’, U+000B TABULAZIONE VERTICALE.
    • È ‘\f’, U+000C MODULO di ALIMENTAZIONE.
    • È ‘\r’, U+000D RITORNO a capo.
    • È ‘\u001C’, U+001C FILE SEPARATORE.
    • È ‘\u001D’, U+001D SEPARATORE di GRUPPO.
    • È ‘\u001E’, U+001E SEPARATORE di RECORD.
    • È ‘\u001F’, U+0
  6. -3
    String text = readFileAsString("textfile.txt");
    text = text.replace("\n", "").replace("\r", "");
    • Questo non è rispondere correttamente alla domanda. Rimuove tutti i CR e Lf, non solo quelli all’inizio e alla fine.
    • Questo sostituirà tutti, non solo l’inizio e la fine.

Lascia un commento