Giới thiệu
Bài viết hướng dẫn cách lấy ký tự đầu tiên từ EditText và kiểm tra nó là nguyên âm (vowel) hay phụ âm (consonant) trong tiếng Anh. Có thể mở rộng cho tiếng Việt.
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 từ (tiếng Anh)"
android:inputType="textCapWords" />
<Button
android:id="@+id/btnCheck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Kiểm tra" />
</LinearLayout>
Bước 3: Logic xử lý (MainActivity.kt)
package com.example.checkvowelconsonant
import android.os.Bundle
import android.widget.Button
import android.widget.EditText
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().trim().lowercase()
if (input.isEmpty()) {
Toast.makeText(this, "Vui lòng nhập từ", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
val firstChar = input.first()
val vowels = setOf('a', 'e', 'i', 'o', 'u')
val result = when {
!firstChar.isLetter() -> "Ký tự '$firstChar' không phải chữ cái"
firstChar in vowels -> "Ký tự '$firstChar' là nguyên âm (vowel)"
else -> "Ký tự '$firstChar' là phụ âm (consonant)"
}
Toast.makeText(this, result, Toast.LENGTH_LONG).show()
}
}
}
Mở rộng cho tiếng Việt
Tiếng Việt có nhiều nguyên âm hơn (a, ă, â, e, ê, i, o, ô, ơ, u, ư, y) và các dấu. Cần chuẩn hóa Unicode (normalize) trước khi so sánh:
import java.text.Normalizer
fun isVietnameseVowel(char: Char): Boolean {
val normalized = Normalizer.normalize(char.toString(), Normalizer.Form.NFD)
.replace(Regex("\\p{Mn}"), "") // Bỏ dấu
.lowercase()
return normalized.first() in setOf('a', 'ă', 'â', 'e', 'ê', 'i', 'o', 'ô', 'ơ', 'u', 'ư', 'y')
}
Giải thích
.lowercase(): Chuyển về chữ thường để so sánh không phân biệt hoa/thường.firstChar.isLetter(): Kiểm tra có phải chữ cái (Unicode letter) không.setOf('a','e','i','o','u'): Set lookup O(1) nhanh hơn nhiều so với chuỗi OR.
Lưu ý
- Chỉ kiểm tra ký tự đầu tiên.
- Số, ký tự đặc biệt, khoảng trắng sẽ báo "không phải chữ cái".
- Đối với tiếng Việt có dấu, cần normalize (bỏ dấu) trước khi check.