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

Cách kiểm tra ký tự đầu tiên của EditText là phụ âm hay nguyên âm

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.