Keluarkan atau Ganti sebahagian String di Java

1. Gambaran keseluruhan

Dalam tutorial ini, kita akan melihat pelbagai cara untuk membuang atau mengganti sebahagian String di Java.

Kami akan meneroka membuang dan / atau mengganti substring menggunakan String API, kemudian menggunakan StringBuilder API dan akhirnya menggunakan kelas StringUtils perpustakaan Apache Commons.

Sebagai bonus, kami juga akan mengganti kata tepat menggunakan String API dan kelas ApEE Commons RegExUtils .

2. String API

Salah satu kaedah paling mudah dan mudah untuk mengganti substring adalah menggunakan kelas Replen, Replan All atau ReplFirst of a String.

Kaedah ganti () mengambil dua argumen - teks sasaran dan penggantian:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = master.replace(target, replacement); assertTrue(processed.contains(replacement)); assertFalse(processed.contains(target));

Coretan di atas akan menghasilkan output ini:

Hello World Java!

Sekiranya ungkapan biasa diperlukan dalam memilih sasaran, maka substitAll () atau substitFirst () harus menjadi kaedah pilihan. Sesuai dengan namanya, menggantikanAll () akan menggantikan setiap kejadian yang sepadan, sementara substitFirst () akan menggantikan kejadian pertama yang sepadan:

String master2 = "Welcome to Baeldung, Hello World Baeldung"; String regexTarget = "(Baeldung)$"; String processed2 = master2.replaceAll(regexTarget, replacement); assertTrue(processed2.endsWith("Java"));

Nilai diproses2 adalah:

Welcome to Baeldung, Hello World Java

Ini kerana regex yang dibekalkan sebagai regexTarget hanya akan sesuai dengan kejadian terakhir Baeldung. Dalam semua contoh yang diberikan di atas, kita boleh menggunakan pengganti kosong dan ia akan berjaya menghilangkan sasaran dari master .

3. StringBuilder API

Kita juga dapat memanipulasi teks di Java menggunakan kelas StringBuilder . Dua kaedah di sini adalah hapus () dan ganti () .

Kita dapat membina contoh StringBuilder dari String yang ada dan kemudian menggunakan kaedah yang disebutkan untuk melakukan manipulasi String seperti yang diinginkan:

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; int startIndex = master.indexOf(target); int stopIndex = startIndex + target.length(); StringBuilder builder = new StringBuilder(master);

Sekarang kita boleh membuang sasaran dengan delete () :

builder.delete(startIndex, stopIndex); assertFalse(builder.toString().contains(target));

Kita juga boleh menggunakan pengganti () untuk mengemas kini master:

builder.replace(startIndex, stopIndex, replacement); assertTrue(builder.toString().contains(replacement));

Satu perbezaan yang jelas antara menggunakan StringBuilder dan String API adalah kita mesti mendapatkan permulaan dan indeks berhenti dari sasaran String .

4. Kelas StringUtils

Kaedah lain yang akan kita pertimbangkan adalah perpustakaan Apache Commons.

Pertama, mari tambahkan kebergantungan yang diperlukan untuk projek kami:

 org.apache.commons commons-lang3 3.8.1 

Versi perpustakaan terkini boleh didapati di sini.

The StringUtils kelas mempunyai kaedah untuk menggantikan subrentetan daripada String :

String master = "Hello World Baeldung!"; String target = "Baeldung"; String replacement = "Java"; String processed = StringUtils.replace(master, target, replacement); assertTrue(processed.contains(replacement));

Terdapat varian overload yang berlebihan () yang mengambil parameter maksimum integer , yang menentukan jumlah kejadian yang akan diganti. Kami juga boleh menggunakan RepliceIgnoreCase () jika kepekaan kes tidak menjadi perhatian :

String master2 = "Hello World Baeldung!"; String target2 = "baeldung"; String processed2 = StringUtils.replaceIgnoreCase(master2, target2, replacement); assertFalse(processed2.contains(target));

5. Menggantikan Kata Tepat

Dalam contoh terakhir ini, kita akan belajar cara mengganti kata yang tepat di dalam String .

Cara mudah untuk melakukan penggantian ini adalah menggunakan ungkapan biasa dengan batas kata.

Perkataan ungkapan biasa ialah \ b . Menutup kata yang diinginkan dalam ungkapan biasa ini hanya akan sesuai dengan kejadian yang tepat.

Pertama, mari kita lihat bagaimana menggunakan ungkapan biasa ini dengan String API:

String sentence = "A car is not the same as a carriage, and some planes can carry cars inside them!"; String regexTarget = "\\bcar\\b"; String exactWordReplaced = sentence.replaceAll(regexTarget, "truck");

The exactWordReplaced rentetan mengandungi:

"A truck is not the same as a carriage, and some planes can carry cars inside them!"

Hanya perkataan yang tepat akan diganti. Perhatikan garis miring ke belakang selalu harus dilarikan ketika bekerja dengan ungkapan biasa di Java.

Cara alternatif untuk melakukan penggantian ini adalah dengan menggunakan kelas RegExUtils dari Perpustakaan Apache Commons, yang dapat ditambahkan sebagai ketergantungan seperti yang kita lihat di bahagian sebelumnya:

String regexTarget = "\\bcar\\b"; String exactWordReplaced = RegExUtils.replaceAll(sentence, regexTarget, "truck"); 

Walaupun kedua-dua kaedah akan menghasilkan hasil yang sama, menentukan mana yang harus digunakan akan bergantung pada senario khusus kita.

6. Kesimpulannya

Sebagai kesimpulan, kami telah meneroka lebih daripada satu cara untuk membuang dan mengganti substring di Java. Kaedah terbaik untuk digunakan masih banyak bergantung pada keadaan dan konteks semasa.

Seperti biasa, kod sumber lengkap boleh didapati di Github.