- 1 1. Pengantar: Mengapa Pencarian String Penting dalam Java
- 2 2. Sintaks Dasar dan Karakteristik Metode contains()
- 3 3. Contoh Penggunaan Praktis dan Pertimbangan Penting
- 4 4. Metode yang Sering Dibandingkan dengan contains()
- 5 5. Kasus Penggunaan Umum dan Contoh Kode
- 6 6. Pertimbangan Kinerja
- 7 7. Perbandingan dengan Bahasa Pemrograman Lain
- 8 8. Pertanyaan yang Sering Diajukan (FAQ)
- 8.1 Q1. Apakah contains() sensitif huruf besar/kecil?
- 8.2 Q2. Bagaimana cara memeriksa pencocokan parsial menggunakan ekspresi reguler?
- 8.3 Q3. Apa yang terjadi jika saya memanggil contains() pada null?
- 8.4 Q4. Apa yang terjadi jika saya memberikan string kosong (“”) ke contains()?
- 8.5 Q5. Bisakah contains() mencari beberapa kata kunci sekaligus?
- 8.6 Q6. Kapan saya harus menggunakan contains() vs indexOf()?
- 9 9. Kesimpulan
1. Pengantar: Mengapa Pencarian String Penting dalam Java
Manipulasi string adalah salah satu operasi yang paling sering digunakan saat memprogram dalam Java.
Baik memeriksa input pengguna, mengurai isi file, atau mencari kata kunci tertentu, Anda sering perlu menentukan apakah kata tertentu terkandung dalam string yang diberikan.
Untuk memenuhi kebutuhan ini, Java menyediakan metode yang nyaman yang disebut contains().
Dengan metode ini, Anda dapat dengan mudah menentukan apakah satu string mengandung sebagian string lainnya.
Misalnya, jika Anda ingin memeriksa apakah pesan kesalahan mengandung kata kunci tertentu, contains() memungkinkan Anda melakukannya dalam satu baris kode.
Terutama dalam skenario yang melibatkan volume teks yang besar—seperti aplikasi web, pemrosesan API, atau analisis log—metode contains() sangat meningkatkan keterbacaan dan kemudahan pemeliharaan kode.
Namun, ada juga pertimbangan penting seperti sensitivitas huruf besar-kecil dan kemungkinan null.
Artikel ini menjelaskan metode contains() Java secara detail—dari penggunaan dasar dan kesalahan umum hingga perbedaan dengan metode lain dan aplikasi praktis.
Tujuan kami adalah menyediakan informasi yang berguna tidak hanya untuk pemula tetapi juga untuk pengembang yang secara aktif menggunakan Java dalam proyek dunia nyata.
2. Sintaks Dasar dan Karakteristik Metode contains()
Metode contains() Java menentukan apakah sebuah string mengandung sebagian string lainnya.
Sintaksnya sangat sederhana, namun sangat praktis dan sering digunakan dalam tugas pemrograman sehari-hari.
Sintaks Dasar
boolean result = targetString.contains(searchString);
Metode ini termasuk dalam kelas String dan menerima CharSequence (umumnya String) sebagai argumennya.
Nilai kembaliannya adalah boolean: true jika string target mengandung substring yang diberikan, dan false jika tidak.
Contoh Kode
String message = "Java programming is fun!";
boolean hasKeyword = message.contains("programming");
System.out.println(hasKeyword); // Output: true
Dalam contoh di atas, substring "programming" ada dalam string target, sehingga contains() mengembalikan true.
Karakteristik Metode
- Hanya memeriksa kecocokan sebagian: Jika Anda membutuhkan kecocokan yang tepat, gunakan
equals()sebagai gantinya. - Sensitif terhadap huruf besar-kecil: Misalnya,
"Java"dan"java"diperlakukan sebagai berbeda (detail dijelaskan nanti). - Tidak mendukung ekspresi reguler: Karena hanya memeriksa keberadaan string, pencocokan pola memerlukan
matches()atau kelasPattern.
Perilaku Saat null Diberikan
Meneruskan null ke contains() memicu NullPointerException.
Misalnya, kode berikut akan melemparkan pengecualian:
String text = null;
System.out.println(text.contains("test")); // Exception occurs
Demikian pula, jika string target itu sendiri adalah null, pengecualian yang sama akan dilemparkan.
Oleh karena itu, sangat disarankan untuk melakukan pemeriksaan null sebelum memanggil contains().
3. Contoh Penggunaan Praktis dan Pertimbangan Penting
Metode contains() Java sangat intuitif dan nyaman, tetapi penggunaan yang salah dapat menyebabkan bug tak terduga atau kode yang tidak efisien.
Bagian ini menjelaskan penggunaan dasar contains() beserta poin-poin kunci yang harus Anda ketahui.
3-1. Contoh Penggunaan Dasar
Kode berikut mendemonstrasikan contoh sederhana untuk memeriksa apakah string target mengandung kata kunci tertentu:
String sentence = "今日はJavaの勉強をしています。";
if (sentence.contains("Java")) {
System.out.println("Javaが含まれています。");
} else {
System.out.println("Javaは含まれていません。");
}
Seperti yang ditunjukkan, contains() sering dikombinasikan dengan pernyataan if untuk melakukan percabangan kondisional.
3-2. Sensitivitas Huruf Besar-Kecil
Metode contains() sensitif terhadap huruf besar-kecil.
Misalnya, kode berikut mengembalikan false:
String text = "Welcome to Java";
System.out.println(text.contains("java")); // false
Dalam kasus seperti itu, umum untuk mengonversi string ke huruf kecil (atau huruf besar) sebelum perbandingan:
String text = "Welcome to Java";
System.out.println(text.toLowerCase().contains("java")); // true
Pendekatan ini membantu menghilangkan perbedaan dalam kasus input (misalnya, input pengguna).
3-3. Penanganan null dan String Kosong
Salah satu pertimbangan terpenting saat menggunakan contains() adalah penanganan null.
Jika string target atau argumen adalah null, maka NullPointerException akan terjadi.
String text = null;
System.out.println(text.contains("test")); // Runtime error
Untuk menghindari masalah ini, selalu tambahkan pemeriksaan null:
if (text != null && text.contains("test")) {
// Safe to process
}
Juga perhatikan:
Meneruskan string kosong ("") selalu mengembalikan true.
String sample = "test";
System.out.println(sample.contains("")); // true
Namun, perilaku ini jarang berguna dalam praktik dan dapat secara tidak sengaja menyebabkan bug jika string kosong diteruskan secara tidak disengaja.
3-4. Tidak Mendukung Pencarian Kata Kunci Ganda
contains() hanya dapat memeriksa satu kata kunci pada satu waktu.
Untuk memeriksa beberapa kata kunci, Anda harus memanggil contains() beberapa kali atau menggunakan Stream API.
String target = "エラーコード123:アクセス拒否";
if (target.contains("エラー") || target.contains("拒否")) {
System.out.println("問題のあるメッセージです。");
}
Atau, untuk set kata kunci dinamis:
List<String> keywords = Arrays.asList("エラー", "障害", "失敗");
boolean found = keywords.stream().anyMatch(target::contains);
4. Metode yang Sering Dibandingkan dengan contains()
Java menyediakan beberapa metode untuk membandingkan string atau memeriksa apakah substring tertentu ada.
Di antara mereka, contains() digunakan untuk “pencocokan parsial,” tetapi metode lain juga memiliki tujuan serupa.
Bagian ini menjelaskan karakteristik dan perbedaan metode-metode tersebut untuk membantu Anda menggunakannya secara tepat.
4-1. Perbedaan dari equals(): Pencocokan Tepat vs. Pencocokan Parsial
equals() menentukan apakah dua string identik secara tepat.
Sebaliknya, contains() memeriksa pencocokan parsial.
String a = "Java";
String b = "Java";
System.out.println(a.equals(b)); // true: Exact match
System.out.println(a.contains("av")); // true: Partial match
Perbedaan utama:
| Comparison | equals() | contains() |
|---|---|---|
| Match Type | Exact match | Partial match |
| Case Sensitivity | Sensitive | Sensitive |
| Argument Type | Object | CharSequence |
Panduan Penggunaan:
Gunakan equals() ketika nilai harus cocok secara tepat (misalnya, verifikasi ID).
Gunakan contains() ketika pencocokan parsial dapat diterima (misalnya, pencarian kata kunci).
4-2. Perbedaan dari indexOf(): Apakah Anda Membutuhkan Posisi
Metode indexOf() juga dapat digunakan untuk memeriksa apakah substring ada dalam string.
Perbedaannya adalah indexOf() mengembalikan indeks awal dari substring jika ditemukan.
Jika substring tidak ditemukan, ia mengembalikan -1.
String text = "Hello, Java World!";
System.out.println(text.indexOf("Java")); // 7
System.out.println(text.indexOf("Python")); // -1
Anda juga dapat menggunakan indexOf() untuk mereplikasi perilaku contains():
if (text.indexOf("Java") >= 0) {
System.out.println("It is contained.");
}
Panduan penggunaan:
Jika Anda tidak membutuhkan indeks, contains() lebih mudah dibaca dan lebih disukai.
4-3. Perbedaan dari matches(): Dukungan untuk Ekspresi Reguler
Metode matches() memeriksa apakah string sepenuhnya cocok dengan ekspresi reguler yang diberikan.
Sebaliknya, contains() hanya memeriksa pencocokan substring literal dan tidak mendukung regex.
String text = "abc123";
System.out.println(text.matches(".*123")); // true
System.out.println(text.contains(".*123")); // false (not regex)
Jika Anda ingin pencocokan parsial berbasis regex, gunakan kelas Pattern:
4-4. Ringkasan Perbandingan Fitur
| Method | Purpose | Return Type | Regex Support | Use Case |
|---|---|---|---|---|
contains() | Partial match | boolean | No | Keyword search |
equals() | Exact match | boolean | No | ID/password checks |
indexOf() | Get match position | int | No | Index-based processing |
matches() | Regex match | boolean | Yes | Find pattern-based strings |
5. Kasus Penggunaan Umum dan Contoh Kode
answer.Java’s contains() method is simple yet widely used in real development scenarios.
Typical use cases include user input validation, log analysis, and filtering operations.
This section covers practical examples with corresponding code.
5-1. Validasi Input Pengguna (Mendeteksi Kata Terlarang)
Dalam formulir atau aplikasi obrolan, Anda mungkin perlu mendeteksi apakah kata‑kata terlarang tertentu termasuk di dalamnya.
String input = "このアプリは最悪だ";
String banned = "最悪";
if (input.contains(banned)) {
System.out.println("不適切な言葉が含まれています。");
}
Menangani beberapa kata NG:
List<String> bannedWords = Arrays.asList("最悪", "バカ", "死ね");
for (String word : bannedWords) {
if (input.contains(word)) {
System.out.println("不適切な言葉が含まれています: " + word);
break;
}
}
5-2. Analisis File Log (Mendeteksi Pesan Spesifik)
Saat menganalisis log sistem atau aplikasi, Anda mungkin ingin mengekstrak hanya baris yang mengandung kata kunci spesifik seperti ERROR atau WARN.
List<String> logs = Arrays.asList(
"[INFO] サーバーが起動しました",
"[ERROR] データベース接続失敗",
"[WARN] メモリ使用率が高い"
);
for (String log : logs) {
if (log.contains("ERROR")) {
System.out.println("エラー発生ログ: " + log);
}
}

5-3. Menyaring String dalam Daftar (Menggunakan Stream API)
Saat menangani dataset besar, gunakan Stream API untuk mengekstrak hanya elemen yang mengandung substring tertentu:
List<String> users = Arrays.asList("tanaka@example.com", "sato@gmail.com", "yamada@yahoo.co.jp");
List<String> gmailUsers = users.stream()
.filter(email -> email.contains("@gmail.com"))
.collect(Collectors.toList());
System.out.println(gmailUsers); // [sato@gmail.com]
5-4. Menganalisis Header Permintaan HTTP atau URL
Dalam pengembangan web, routing atau penanganan khusus perangkat mungkin memerlukan pemeriksaan substring pada User-Agent atau URL.
String userAgent = "Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X)";
if (userAgent.contains("iPhone")) {
System.out.println("スマートフォンからのアクセスです。");
}
5-5. Memeriksa Jalur File atau Ekstensi
Untuk menentukan tipe file menggunakan jalurnya:
String filePath = "/usr/local/data/sample.csv";
if (filePath.contains(".csv")) {
System.out.println("CSVファイルです。");
}
Catatan:
Untuk pemeriksaan ekstensi file, endsWith(".csv") seringkali lebih akurat.
Pertimbangan Praktis
- Terapkan normalisasi (mis.,
toLowerCase(),trim()) ketika akurasi diperlukan. - Untuk data berskala besar, pertimbangkan Stream API atau regex.
- Ingat bahwa
contains()adalah pencocokan parsial—gabungkan dengan kondisi lain untuk logika yang lebih aman.
6. Pertimbangan Kinerja
Meskipun metode contains() menawarkan keterbacaan dan kesederhanaan yang luar biasa, Anda harus mempertimbangkan dampak kinerjanya saat menangani dataset besar atau menjalankan operasi berulang. Bagian ini menjelaskan biaya pemrosesan contains() dan pendekatan alternatif untuk meningkatkan efisiensi.
6-1. Perilaku Internal dan Kompleksitas Waktu contains()
Metode contains() mencari string target secara berurutan dari awal untuk menemukan substring. Secara internal, ia bergantung pada metode indexOf(), dan kompleksitas waktu terburuknya adalah:
O(n * m)
– n = panjang string target
– m = panjang string pencarian
Contoh pemrosesan berat:
for (String line : hugeTextList) {
if (line.contains("error")) {
// processing
}
}
Ini dapat secara signifikan memengaruhi kinerja ketika diulang dalam loop besar.
6-2. Teknik untuk Meningkatkan Kinerja pada Pencarian Sering
Saat menggunakan contains() berulang kali dalam dataset besar, teknik berikut dapat meningkatkan kecepatan pemrosesan:
• Konversi semua string ke huruf kecil terlebih dahulu
Alih-alih memanggil toLowerCase() pada setiap perbandingan, normalisasi string terlebih dahulu:
List<String> normalizedList = originalList.stream()
.map(String::toLowerCase)
.collect(Collectors.toList());
• Gunakan Stream API dengan parallel() untuk pemrosesan paralel
Manfaatkan inti CPU untuk mempercepat pencarian:
List<String> result = hugeTextList.parallelStream()
.filter(line -> line.contains("keyword"))
.collect(Collectors.toList());
• Gunakan ekspresi reguler untuk pola pencarian yang kompleks
Jika kondisi kompleks dan dapat diekspresikan dalam satu regex, Pattern mungkin bekerja lebih baik:
Pattern pattern = Pattern.compile("error|fail|fatal");
for (String log : logs) {
if (pattern.matcher(log).find()) {
// matched
}
}
6-3. Pertimbangan Efisiensi Memori dan Dapat Digunakan Kembali
Operasi yang sering mengonversi string—seperti toLowerCase() atau substring()—dapat menghasilkan banyak objek string yang tidak diperlukan, yang memengaruhi penggunaan memori.
Hal ini terutama penting untuk aplikasi yang berjalan lama atau pemrosesan sisi server.
Poin penting:
- Hindari membuat instance string yang tidak diperlukan.
- Untuk dataset besar, pertimbangkan buffering atau pemrosesan dalam potongan.
- Menyimpan cache hasil
contains()yang berulang dapat meningkatkan kinerja dalam kasus tertentu.
7. Perbandingan dengan Bahasa Pemrograman Lain
Metode contains() Java menawarkan pencocokan substring yang sederhana dan dapat diandalkan, tetapi bahasa lain menyediakan fitur serupa dengan karakteristik masing-masing.
Bagian ini membandingkan pemeriksaan substring di Python, JavaScript, dan C# untuk menyoroti perbedaan dan kesamaan.
7-1. Python: Pencocokan Parsial Sederhana dengan Operator in
Di Python, Anda dapat memeriksa inklusi substring menggunakan operator in:
text = "Hello, Python!"
if "Python" in text:
print("含まれています")
Sintaks ini sangat mudah dibaca—hampir seperti bahasa alami—dan memerlukan pembelajaran minimal.
Perbedaan dan Catatan:
inadalah operator bahasa, bukan metode.- Python juga sensitif huruf besar/kecil untuk perbandingan string.
Nonemenghasilkan pengecualian; pemeriksaan null diperlukan.
7-2. JavaScript: Pencocokan Parsial dengan includes()
Di JavaScript (ES6+), Anda dapat menggunakan metode includes():
const text = "JavaScript is fun";
console.log(text.includes("fun")); // true
Metode ini sangat mirip dengan contains() Java dan mudah dipindahkan secara mental.
Perbedaan dan Catatan:
- Memberikan
undefinedtidak melempar pengecualian; ia hanya mengembalikanfalse. includes()juga berfungsi pada array, meningkatkan fleksibilitasnya.
7-3. C#: Contains() Mirip dengan Java
C# juga menyediakan metode Contains() dengan perilaku yang mirip dengan Java:
string text = "Welcome to C#";
bool result = text.Contains("C#");
Perbedaan dan Catatan:
Contains()C# sensitif huruf besar/kecil secara default, tetapi Anda dapat mengabaikan huruf dengan menggunakanStringComparison.OrdinalIgnoreCase.- Memberikan null memicu
ArgumentNullException.
7-4. Tabel Perbandingan Antara Bahasa
| Language | Example Syntax | Case Sensitivity | Notes |
|---|---|---|---|
| Java | "abc".contains("a") | Sensitive | Throws exception on null |
| Python | "a" in "abc" | Sensitive | Most intuitive syntax |
| JavaScript | "abc".includes("a") | Sensitive | Also works for arrays |
| C# | "abc".Contains("a") | Sensitive (configurable) | Comparison mode can be chosen |
Ringkasan: Pilih Sintaks yang Tepat untuk Kasus Penggunaan Anda
Meskipun pemeriksaan substring adalah kebutuhan umum di semua bahasa, setiap bahasa menyediakan metode atau sintaksnya masing-masing.
contains() Java menawarkan stabilitas dan kejelasan, menjadikannya cocok untuk sistem perusahaan dan aplikasi yang dapat dipelihara.
Bahasa seperti Python dan JavaScript menawarkan sintaks yang lebih sederhana dan ringkas, yang dapat ideal untuk skrip ringan atau prototipe cepat.
Dengan memahami baik konsep umum maupun fitur spesifik masing-masing bahasa, Anda akan dapat menulis kode yang lebih aman dan efisien di berbagai bahasa.
8. Pertanyaan yang Sering Diajukan (FAQ)
Berikut adalah pertanyaan yang sering diajukan mengenai metode contains() Java—membantu Anda memahami poin-poin rumit dan menghindari jebakan umum.
Q1. Apakah contains() sensitif huruf besar/kecil?
Ya, ia sensitif huruf besar/kecil.
Sebagai contoh, "Java".contains("java") mengembalikan false.
Solusi:
String input = "Welcome to Java";
boolean result = input.toLowerCase().contains("java");
Q2. Bagaimana cara memeriksa pencocokan parsial menggunakan ekspresi reguler?
contains() tidak mendukung ekspresi reguler.
Gunakan matches() atau kelas Pattern sebagai gantinya.
Contoh (memeriksa pola numerik):
import java.util.regex.Pattern;
import java.util.regex.Matcher;
String text = "注文番号: A123456";
Pattern pattern = Pattern.compile("A\\d+");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) {
System.out.println("パターンに一致しました。");
}
Q3. Apa yang terjadi jika saya memanggil contains() pada null?
Akan dilemparkan NullPointerException.
String target = null;
System.out.println(target.contains("test")); // Error
Solusi:
if (target != null && target.contains("test")) {
System.out.println("含まれています。");
}
Q4. Apa yang terjadi jika saya memberikan string kosong (“”) ke contains()?
Selalu mengembalikan true.
String text = "Java";
System.out.println(text.contains("")); // true
Meskipun merupakan bagian dari spesifikasi resmi, perilaku ini jarang berguna dan dapat menyebabkan bug yang tidak terduga jika string kosong tidak dimaksudkan.
Q5. Bisakah contains() mencari beberapa kata kunci sekaligus?
Tidak. Setiap pemanggilan memeriksa hanya satu kata kunci.
String text = "本日はシステムエラーが発生しました";
if (text.contains("エラー") || text.contains("障害") || text.contains("失敗")) {
System.out.println("問題が検出されました。");
}
Pendekatan dinamis:
List<String> keywords = Arrays.asList("エラー", "障害", "失敗");
boolean found = keywords.stream().anyMatch(text::contains);
Q6. Kapan saya harus menggunakan contains() vs indexOf()?
contains() mengembalikan boolean, sedangkan indexOf() mengembalikan indeks numerik.
- Gunakan
contains()ketika Anda hanya ingin mengetahui apakah substring ada. - Gunakan
indexOf()ketika Anda juga membutuhkan posisi.String text = "Error: Disk full"; if (text.contains("Error")) { int pos = text.indexOf("Error"); System.out.println("Position: " + pos); }
9. Kesimpulan
Metode contains() Java adalah alat yang kuat dan nyaman untuk menentukan apakah sebuah substring tertentu terdapat dalam sebuah string.
Metode ini banyak digunakan dalam berbagai skenario seperti validasi input pengguna, analisis log, dan penyaringan data.
Dalam artikel ini, kami membahas:
- Sintaks dasar dan nilai kembali
- Sensitivitas huruf besar/kecil dan cara menanganinya
- Penanganan null dan string kosong
- Perbedaan dengan metode perbandingan string lainnya
- Kasus penggunaan praktis: validasi, pencarian log, pemrosesan Stream
- Pertimbangan kinerja dan teknik optimisasi
- Perbandingan dengan Python, JavaScript, dan C#
- Pertanyaan yang sering diajukan dan tips pemecahan masalah
Meskipun contains() intuitif dan serbaguna, penggunaannya harus dievaluasi dengan hati-hati dalam kasus yang melibatkan dataset besar, pemanggilan yang sering, atau kondisi pencarian yang kompleks.
Dengan menggabungkan normalisasi, pemrosesan paralel, regex, dan strategi caching, Anda dapat mempertahankan kinerja sekaligus keterbacaan.
Karena contains() merupakan hal mendasar dalam bekerja dengan string di Java, kami berharap artikel ini membantu Anda menggunakannya dengan lebih aman dan efektif dalam proyek pengembangan Anda.

