Bir dizenin başından ve sonundan yeni satırlar nasıl kaldırılır?


Yanıtlar:


278

String.trim()Dizenin başındaki ve sonundaki boşluklardan (boşluklar, yeni satırlar vb.) Kurtulmak için yöntemi kullanın .

String trimmedString = myString.trim();

18
Soru yeni satırlarla ilgili. Bu, yeni satırlardan daha fazlasını kaldırır
mmm

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

14
Bro, @JohnB Dize arasındaki tüm yeni satır karakterlerini de kaldıracaktır. istek yalnızca baştaki ve sondaki yeni satır karakterini kaldırmaktır.
siddhartha

5

tl; Dr.

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

String::strip…

Eski String::trimyöntem vardır tuhaf bir tanım içinde boşluk .

Bahsedildiği gibi burada , Java 11 yeni ekler strip…için yöntemler Stringsınıfında. Bunlar, boşlukların daha Unicode açısından daha anlayışlı bir tanımını kullanır. JavaDoc sınıfındaki bu tanımın kurallarına bakın Character::isWhitespace.

Örnek kod.

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

Yoksa şerit olabilir sadece lider veya sadece sondaki boşluk.

Yeni satırlarınızı hangi kod noktalarının oluşturduğunu tam olarak belirtmiyorsunuz . Yeni satırınızın aşağıdakiler tarafından hedeflenen bu kod noktaları listesine dahil edildiğini tahmin ediyorum strip:

  • Bu bir Unicode boşluk karakteridir (SPACE_SEPARATOR, LINE_SEPARATOR veya PARAGRAPH_SEPARATOR), ancak aynı zamanda bölünemez bir boşluk değildir ('\ u00A0', '\ u2007', '\ u202F').
  • "\ T", U + 0009 YATAY TABLOLAMA.
  • "\ N", U + 000A SATIR BESLEMESİ.
  • "\ U000B", U + 000B DİKEY TABLOLAMA.
  • Bu '\ f', U + 000C FORM FEED'dir.
  • "\ R", U + 000D TAŞIMA İADESİ.
  • "\ U001C", U + 001C DOSYA AYIRICIDIR.
  • '\ U001D', U + 001D GRUP AYIRICIDIR.
  • "\ U001E", U + 001E KAYIT AYIRICIDIR.
  • "\ U001F", U + 0

4

Bu Java kodu, sorunun başlığında sorulanı tam olarak yapar, yani "bir dizge java'nın başından ve sonundan yeni satırları kaldır":

String.replaceAll("^[\n\r]", "").replaceAll("[\n\r]$", "")

Yeni satırları yalnızca satırın sonundan kaldırın:

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

Yeni satırları yalnızca satırın başından kaldırın:

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

Cevabınıza fazladan bir bağlam sağlayabilir misiniz? Bu şekilde herkes kodunuzun ne yaptığını ve nedenini anlayabilir.
Mariano Zorrilla

Cevabıma açıklamalar ekledim. Umarım artık açıktır.
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. Bir dizenin başlangıcı = ^,
  2. Bir dizenin sonu = $,
  3. normal ifade kombinasyonu = | ,
  4. Satır sonu = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

1

Yalnızca baştaki ve sondaki satır sonlarını (boşlukları, sekmeleri değil) kaldırmak istiyorsanız bir String'in (arada değil) istiyorsanız, bu yaklaşımı kullanabilirsiniz:

Bir dizenin başından ( ) ve sonundan ( ) \\rsatır \\nbaşlarını ( ^) ve satır beslemelerini ( ) kaldırmak için normal bir ifade kullanın $:

 s = s.replaceAll("(^[\\r\\n]+|[\\r\\n]+$)", "")

Tam Örnek:

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

Çıktıları:

before: >
Hello
World
<
after: >Hello
World<

0

Buna bir cevap da ekleyeceğim çünkü aynı soruyu sorarken verilen cevap yeterli olmadı. Biraz düşündüğümde, bunun düzenli bir ifade ile çok kolay yapılabileceğini fark ettim.

Yeni satırları baştan kaldırmak için:

// Trim left
String[] a = "\n\nfrom the beginning\n\n".split("^\\n+", 2);

System.out.println("-" + (a.length > 1 ? a[1] : a[0]) + "-");

ve bir dizenin sonu:

// Trim right
String z = "\n\nfrom the end\n\n";

System.out.println("-" + z.split("\\n+$", 2)[0] + "-");

Bunun bir ipi kesmenin en verimli performans yolu olmadığından eminim. Ancak, böyle bir operasyonu sıralı hale getirmenin en temiz ve en basit yolu gibi görünüyor.

Basit bir normal ifade olduğundan, her iki uçtan herhangi bir varyasyonu ve karakter kombinasyonunu kırpmak için aynı yöntemin uygulanabileceğini unutmayın.


Evet ama ya başında / sonunda kaç satır olduğunu bilmiyorsan? Çözümünüz her iki durumda da tam olarak 2 yeni satır olduğunu varsayar
Luka Govedič

İkinci parametre split()sadece sınırdır. Sınırsız sayıda eşleştirmek istiyorsanız bunu kapalı bırakın.
Zhro

0

Bunu dene

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

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

2
Bu soruya doğru cevap vermiyor. Yalnızca başlangıç ​​ve sondakileri değil, tüm CR ve LF'leri kaldırır.
james.garriss

Bu sadece baştan ve sondan değil, her şeyin yerini alacak.
Hamzeh Soboh
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.