Bagaimana menghapus baris baru dari awal dan akhir suatu string?

129

Saya memiliki string yang berisi beberapa teks diikuti oleh baris kosong. Apa cara terbaik untuk menjaga bagian dengan teks, tetapi menghapus baris putih spasi dari akhir?

Confiqure
sumber
Kemungkinan duplikat Menghapus spasi putih dari string di Java
Alex K
1
Bukan itu. Pertanyaan di tautan menanyakan tentang 'ganti', bukan ..
Faiz

Jawaban:

277

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

String trimmedString = myString.trim();
Crozin
sumber
18
Pertanyaannya adalah tentang baris baru. Ini menghapus lebih dari sekadar baris baru
mmm
21
String.replaceAll("[\n\r]", "");
John B
sumber
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
Basil Bourque
sumber
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]", "")
Alexander Samoylov
sumber
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]
hmmh
sumber
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.

Zhro
sumber
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, "");
}
Jobelle
sumber
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<
slartidan
sumber
-3
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");
Khan
sumber
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