Hapus atau Ganti bagian dari String di Java

1. Ikhtisar

Dalam tutorial ini, kita akan melihat berbagai cara untuk menghapus atau mengganti bagian dari String di Java.

Kami akan mengeksplorasi menghapus dan / atau mengganti substring menggunakan API String , kemudian menggunakan API StringBuilder dan terakhir menggunakan kelas StringUtils dari pustaka Apache Commons.

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

2. API String

Salah satu metode paling sederhana dan mudah untuk mengganti substring adalah menggunakan kelas replace, replaceAll atau replaceFirst dari sebuah String.

Metode replace () mengambil dua argumen - teks target dan pengganti:

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));

Cuplikan di atas akan menghasilkan keluaran ini:

Hello World Java!

Jika ekspresi reguler diperlukan dalam memilih target, maka replaceAll () atau replaceFirst () harus menjadi metode pilihan. Seperti yang tersirat dari namanya, replaceAll () akan menggantikan setiap kejadian yang cocok, sedangkan replaceFirst () akan menggantikan kejadian pertama yang cocok:

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

Nilai yang diproses2 akan menjadi:

Welcome to Baeldung, Hello World Java

Itu karena regex yang disediakan sebagai regexTarget hanya akan cocok dengan kemunculan terakhir Baeldung. Dalam semua contoh yang diberikan di atas, kita dapat menggunakan pengganti kosong dan secara efektif akan menghapus target dari master .

3. API StringBuilder

Kami juga dapat memanipulasi teks di Java menggunakan kelas StringBuilder . Dua metode di sini adalah delete () dan replace () .

Kita dapat membuat sebuah instance dari StringBuilder dari String yang ada dan kemudian menggunakan metode 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 bisa menghapus target dengan delete () :

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

Kita juga bisa menggunakan replace () untuk memperbarui master:

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

Satu perbedaan nyata antara menggunakan StringBuilder dan API String adalah kita harus mendapatkan indeks awal dan penghentian dari String target itu sendiri.

4. Kelas StringUtils

Metode lain yang akan kami pertimbangkan adalah pustaka Apache Commons.

Pertama, mari tambahkan ketergantungan yang diperlukan ke proyek kita:

 org.apache.commons commons-lang3 3.8.1 

Versi terbaru perpustakaan dapat ditemukan di sini.

Kelas StringUtils memiliki metode untuk mengganti substring dari String :

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

Ada varian overload dari replace () yang mengambil parameter maks bilangan bulat , yang menentukan jumlah kemunculan yang akan diganti. Kita juga dapat menggunakan replaceIgnoreCase () jika sensitivitas huruf tidak menjadi perhatian :

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

5. Mengganti Kata yang Tepat

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

Cara langsung untuk melakukan penggantian ini menggunakan ekspresi reguler dengan batas kata.

Ekspresi reguler batas kata adalah \ b . Memasukkan kata yang diinginkan di dalam ekspresi reguler ini hanya akan cocok dengan kemunculan yang tepat.

Pertama, mari kita lihat cara menggunakan ekspresi reguler ini dengan API String:

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 string berisi:

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

Hanya kata persisnya yang akan diganti. Perhatikan bahwa garis miring ke belakang selalu perlu di-escape saat bekerja dengan ekspresi reguler di Java.

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

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

Meskipun kedua metode akan memberikan hasil yang sama, memutuskan mana yang harus digunakan akan bergantung pada skenario khusus kami.

6. Kesimpulan

Sebagai kesimpulan, kami telah mempelajari lebih dari satu cara untuk menghapus dan mengganti substring di Java. Metode terbaik untuk diterapkan masih sangat bergantung pada situasi dan konteks saat ini.

Seperti biasa, kode sumber lengkap tersedia di Github.