Bagaimana menghapus baris baru dari awal dan akhir suatu string?


Jawaban:


277

Gunakan String.trim()metode untuk menyingkirkan spasi putih (spasi, garis baru, dll.) Dari awal dan akhir string.

String trimmedString = myString.trim();

18
Pertanyaannya adalah tentang baris baru. Ini menghapus lebih dari sekadar baris baru
mmm

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

14
Bro, @JohnB Ini akan menghapus semua karakter baris baru di antara string juga. yang diminta adalah menghapus hanya karakter baris baru yang memimpin & mengikuti.
siddhartha

5

tl; dr

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

String::strip…

Lama String::trimmetode memiliki definisi yang aneh dari spasi .

Seperti dibahas di sini , Java 11 menambahkan strip…metode baru ke Stringkelas. Ini menggunakan definisi whitespace yang lebih memahami Unicode. Lihat aturan definisi ini di kelas JavaDoc untuk Character::isWhitespace.

Kode contoh.

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

Atau Anda dapat menghapus hanya spasi awal atau hanya spasi.

Anda tidak menyebutkan secara pasti poin kode apa yang membentuk baris baru Anda. Saya membayangkan baris baru Anda kemungkinan termasuk dalam daftar poin kode yang ditargetkan oleh strip:

  • Ini adalah karakter ruang Unicode (SPACE_SEPARATOR, LINE_SEPARATOR, atau PARAGRAPH_SEPARATOR) tetapi juga bukan ruang tanpa putus ('\ u00A0', '\ u2007', '\ u2007', '\ u202F').
  • Ini adalah '\ t', U + 0009 TABULASI HORIZONTAL.
  • Ini adalah '\ n', U + 000A LINE FEED.
  • Ini adalah '\ u000B', U + 000B TABULASI VERTIKAL.
  • Ini adalah '\ f', U + 000C FORMULIR PAKAN.
  • Ini adalah PENGEMBALIAN KARENA '+ r', U + 000D.
  • Ini adalah '\ u001C', U + 001C FILE SEPARATOR.
  • Ini adalah '\ u001D', U + 001D GROUP SEPARATOR.
  • Ini adalah '\ u001E', U + 001E RECORD SEPARATOR.
  • Ini adalah '\ u001F', U + 0

4

Kode Java ini melakukan persis apa yang ditanyakan dalam judul pertanyaan, yaitu "menghapus baris baru dari awal dan akhir string-java":

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

Hapus baris baru hanya dari akhir baris:

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

Hapus baris baru hanya dari awal baris:

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

Bisakah Anda memberikan konteks tambahan untuk jawaban Anda? Dengan begitu semua orang bisa mengerti apa yang kode Anda lakukan dan mengapa.
Mariano Zorrilla

Saya telah menambahkan penjelasan untuk jawaban saya. Saya harap sekarang sudah jelas.
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. Mulai dari string = ^,
  2. Akhir string = $,
  3. kombinasi regex = | ,
  4. Linebreak = \ r \ n | [\ n \ x0B \ x0C \ r \ u0085 \ u2028 \ u2029]

0

Saya akan menambahkan jawaban untuk ini juga karena, sementara saya memiliki pertanyaan yang sama, jawaban yang diberikan tidak cukup. Mengingat beberapa pemikiran, saya menyadari bahwa ini dapat dilakukan dengan sangat mudah dengan ekspresi reguler.

Untuk menghapus baris baru dari awal:

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

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

dan akhir string:

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

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

Saya yakin ini bukan cara yang paling efisien untuk memangkas string. Tapi itu tampaknya menjadi cara paling bersih dan paling sederhana untuk melakukan operasi semacam itu.

Perhatikan bahwa metode yang sama dapat dilakukan untuk memangkas variasi dan kombinasi karakter dari kedua ujung karena ini adalah regex sederhana.


Ya tetapi bagaimana jika Anda tidak tahu berapa banyak garis di awal / akhir? Solusi Anda mengasumsikan tepat ada 2 baris baru di kedua kasus
Luka Govedič

Parameter kedua split()hanyalah batas. Biarkan saja jika Anda ingin mencocokkan dengan jumlah yang tidak terbatas.
Zhro

0

Coba ini

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

0

Jika Anda hanya ingin menghapus jeda baris (bukan spasi, tab) di awal dan akhir sebuah String (bukan inbetween), maka Anda dapat menggunakan pendekatan ini:

Gunakan ekspresi reguler untuk menghapus carriage return ( \\r) dan umpan baris ( \\n) dari awal ( ^) dan ending ( $) dari sebuah string:

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

Contoh Lengkap:

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

Ini menghasilkan:

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

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

2
Ini tidak menjawab pertanyaan dengan benar. Ini menghapus semua CR dan LF, bukan hanya yang di awal dan akhir.
james.garriss

Ini akan menggantikan semua, tidak hanya dari awal dan akhir.
Hamzeh Soboh
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.