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?
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?
Jawaban:
Gunakan String.trim()
metode untuk menyingkirkan spasi putih (spasi, garis baru, dll.) Dari awal dan akhir string.
String trimmedString = myString.trim();
String.replaceAll("[\n\r]", "");
String cleanString = dirtyString.strip() ; // Call new `String::string` method.
String::strip…
Lama String::trim
metode memiliki definisi yang aneh dari spasi .
Seperti dibahas di sini , Java 11 menambahkan strip…
metode baru ke String
kelas. 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
:
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]", "")
Jika string Anda berpotensi null
, pertimbangkan untuk menggunakan StringUtils.trim()
- versi null-safe dari String.trim()
.
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])$", "") + "]");
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.
split()
hanyalah batas. Biarkan saja jika Anda ingin mencocokkan dengan jumlah yang tidak terbatas.
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<
String text = readFileAsString("textfile.txt");
text = text.replace("\n", "").replace("\r", "");