Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách dùng contains() trong TextView Android để kiểm tra chuỗi con

Giới thiệu

Bài viết minh họa cách dùng phương thức String.contains() để kiểm tra chuỗi nhập vào EditText có chứa một chuỗi con cụ thể hay không (ví dụ: "tutorialspoint").

Các bước thực hiện

Bước 1: Tạo project mới

Android Studio → File → New Project → Empty Activity.

Bước 2: Giao diện (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    android:padding="16dp">

    <EditText
        android:id="@+id/etInput"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Nhập chuỗi (ví dụ: tutorialspoint is best)"
        android:inputType="text" />

    <Button
        android:id="@+id/btnCheck"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="Kiểm tra contains" />

    <TextView
        android:id="@+id/tvResult"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="24dp"
        android:textSize="18sp"
        android:textStyle="bold" />

</LinearLayout>

Bước 3: Logic (MainActivity.kt)

package com.example.containsdemo

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        btnCheck.setOnClickListener {
            val input = etInput.text.toString()
            if (input.isEmpty()) {
                etInput.error = "Vui lòng nhập chuỗi"
                return@setOnClickListener
            }

            val searchTerm = "tutorialspoint"
            val contains = input.contains(searchTerm, ignoreCase = true) // Kotlin extension

            tvResult.text = "contains(\"$searchTerm\"): $contains"
            Toast.makeText(this, "Kết quả: $contains", Toast.LENGTH_LONG).show()
        }
    }
}

Giải thích contains()

  • input.contains("tutorialspoint"): Trả về Boolean - true nếu tìm thấy chuỗi con.
  • Kotlin có overload contains(other, ignoreCase = true) - rất tiện.
  • Java: input.contains("tutorialspoint") (case-sensitive), hoặc input.toLowerCase().contains("tutorialspoint").

So sánh các phương pháp tìm kiếm chuỗi

Phương thức Mục đích Case-sensitive Hiệu năng
contains(substring) Có chứa substring? Có (Java), Tùy chọn (Kotlin) O(n*m) - đủ nhanh cho string ngắn
startsWith(prefix) Bắt đầu bằng prefix? Có O(m) - nhanh hơn
endsWith(suffix) Kết thúc bằng suffix? Có O(m) - nhanh hơn
indexOf(substring) Vị trí đầu tiên của substring (-1 nếu không) Có O(n*m) - trả về index
matches(regex) Khớp regex toàn chuỗi Có Chậm (compile regex)
Regex.containsMatchIn() Regex search anywhere Tùy pattern Chậm

Các trường hợp sử dụng thực tế

1. Validation email domain

val email = "user@company.com"
val isCompanyEmail = email.contains("@company.com", ignoreCase = true)

2. Filter list (Search)

val filtered = items.filter { it.name.contains(query, ignoreCase = true) }

3. Kiểm tra từ khóa nhạy cảm

val bannedWords = listOf("spam", "scam", "phishing")
val hasBanned = bannedWords.any { input.contains(it, ignoreCase = true) }

4. File extension check

val isImage = fileName.contains(".jpg", ignoreCase = true) ||
              fileName.contains(".png", ignoreCase = true) ||
              fileName.contains(".webp", ignoreCase = true)
// Hoặc tốt hơn:
val isImage = fileName.lowercase().let { it.endsWith(".jpg") || it.endsWith(".png") || it.endsWith(".webp") }

Lưu ý

  • contains("") luôn trả về true.
  • Kotlin ignoreCase = true dùng locale mặc định, có thể khác biệt cho tiếng Turk/Αζερbaycan. Dùng equals(..., ignoreCase = true) cho so sánh toàn chuỗi.
  • Với string rất lớn/lặp nhiều lần, cân nhắc StringBuilder hoặc indexing (KMP, Boyer-Moore).
  • Null safety: input?.contains(...) hoặc input.orEmpty().contains(...).