Giới thiệu
Bài viết minh họa cách dùng phương thức String.endsWith() để kiểm tra chuỗi nhập vào EditText có kết thúc bằng một chuỗi con cụ thể hay không (ví dụ: "point").
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)"
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 endsWith" />
<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.endswithdemo
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 suffix = "point"
val endsWithSuffix = input.endsWith(suffix)
tvResult.text = "endsWith(\"$suffix\"): $endsWithSuffix"
Toast.makeText(this, "Kết quả: $endsWithSuffix", Toast.LENGTH_LONG).show()
}
}
}
Giải thích endsWith()
input.endsWith("point"): Trả vềBoolean- true nếu chuỗi kết thúc bằng "point".- Phân biệt chữ hoa/thường (case-sensitive).
- Có overload:
endsWith(suffix, ignoreCase)(Kotlin extension) hoặcregionMatches(Java).
Các biến thể hữu ích
1. Không phân biệt hoa/thường (Case-insensitive)
// Kotlin extension
val result = input.endsWith("POINT", ignoreCase = true)
// Java
boolean result = input.toLowerCase().endsWith("point");
// Hoặc
boolean result = input.regionMatches(true, input.length - "point".length, "point", 0, "point".length);
2. Kiểm tra nhiều hậu tố (Multiple suffixes)
val suffixes = listOf(".com", ".net", ".org", ".vn")
val hasValidDomain = suffixes.any { input.endsWith(it, ignoreCase = true) }
3. Kiểm tra prefix (startsWith) - đối ngẫu
val startsWithHttp = input.startsWith("https://") || input.startsWith("https://")
So sánh các phương pháp kiểm tra chuỗi
| Phương thức | Mục đích | Ví dụ |
|---|---|---|
endsWith(suffix) |
Kết thúc bằng suffix | "abc".endsWith("c") = true |
startsWith(prefix) |
Bắt đầu bằng prefix | "abc".startsWith("a") = true |
contains(substring) |
Chứa substring bất kỳ vị trí | "abc".contains("b") = true |
matches(regex) |
Khớp regex toàn chuỗi | "abc".matches("a.c") = true |
Lưu ý
endsWith("")luôn trả vềtrue(chuỗi rỗng là hậu tố của mọi chuỗi).- Kotlin
endsWith(suffix, ignoreCase = true)tiện hơn Java. - Dùng cho validation: email domain, file extension, URL pattern, v.v.