You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用中如何检测字符串语言及编程判断单词是否为英文

在Android中检测字符串语言与判断英文单词的方法

嘿,我来帮你搞定这两个问题!先说说你之前尝试的Locale.getDefault().getDisplayLanguage().equals()——这个其实是获取系统默认的语言设置,没法检测任意字符串的实际语言,所以得用专门的方法。


一、检测任意字符串的语言

Android提供了几种靠谱的方式,根据你的API兼容需求来选:

1. 用系统TextClassifier(API 26+,推荐)

Android 8.0及以上的系统自带了TextClassifier,可以精准检测文本语言,还能处理多语言混合的情况:

Kotlin代码:

import android.view.textclassifier.TextClassifier
import java.util.Locale

fun detectTextLanguage(text: String): String? {
    val textClassifier = TextClassifier.getDefaultInstance()
    val detectionResult = textClassifier.detectLanguage(
        TextClassifier.Request.Builder(text).build()
    )
    // 取置信度最高的语言标签,转成易读的语言名称
    return detectionResult.languageTags.firstOrNull()?.let {
        Locale.forLanguageTag(it).displayName
    }
}

Java代码:

import android.view.textclassifier.TextClassifier;
import java.util.Locale;

public String detectTextLanguage(String text) {
    TextClassifier textClassifier = TextClassifier.getDefaultInstance();
    TextClassifier.Result detectionResult = textClassifier.detectLanguage(
            new TextClassifier.Request.Builder(text).build()
    );
    if (!detectionResult.getLanguageTags().isEmpty()) {
        String languageTag = detectionResult.getLanguageTags().get(0);
        return new Locale.Builder().setLanguageTag(languageTag).build().getDisplayName();
    }
    return null;
}

2. 兼容低版本(API 24+):用ICU LanguageDetector

如果需要支持Android 7.0及以上,可以用android.icu.text.LanguageDetector:

import android.icu.text.LanguageDetector
import android.icu.text.LanguageDetector.DetectorCallback

fun detectLanguageForLowerApi(text: String): String? {
    val detector = LanguageDetector.getInstance()
    var detectedLang: String? = null
    detector.detect(text, object : DetectorCallback {
        override fun onLanguageDetected(language: String) {
            detectedLang = language
        }
    })
    return detectedLang?.let { Locale.forLanguageTag(it).displayName }
}

3. 第三方库(兼容更低版本)

如果要支持API 24以下,可以用开源库language-detector,在build.gradle添加依赖:

implementation 'com.optimaize.languagedetector:language-detector:0.6'

然后按照库的文档调用即可。


二、判断某个单词是否为英文单词

分两种场景:只是判断字符是否为英文,还是判断是否是真实存在的英文单词。

1. 仅判断字符是否为英文(正则表达式)

如果只是检查单词是否由英文字母组成,用正则就足够了:

Kotlin代码:

fun isEnglishCharSequence(word: String): Boolean {
    // 匹配大小写英文字母,支持带连字符的单词比如"mother-in-law"可以调整正则
    return word.matches(Regex("^[a-zA-Z-]+$"))
}

Java代码:

public boolean isEnglishCharSequence(String word) {
    return word.matches("^[a-zA-Z-]+$");
}

2. 判断是否为真实存在的英文单词

如果要确认单词是真实的英文词汇,可以用系统的拼写检查服务,或者嵌入本地字典:

方法A:用系统SpellCheckerSession

Android自带拼写检查功能,需要在Manifest中添加权限(如果需要在线检查):

<uses-permission android:name="android.permission.INTERNET" />

然后实现检查逻辑:

Kotlin代码:

import android.content.Context
import android.view.textservice.SentenceSuggestionsInfo
import android.view.textservice.SpellCheckerManager
import android.view.textservice.SpellCheckerSession
import android.view.textservice.SuggestionsInfo

class EnglishWordChecker(private val context: Context) {
    private var spellCheckerSession: SpellCheckerSession? = null
    private var resultCallback: ((Boolean) -> Unit)? = null

    fun checkIfRealEnglishWord(word: String, onResult: (Boolean) -> Unit) {
        resultCallback = onResult
        val spellChecker = SpellCheckerManager.getSpellChecker(context)
        spellChecker ?: run {
            onResult(false)
            return
        }

        val sessionListener = object : SpellCheckerSession.SpellCheckerSessionListener {
            override fun onGetSuggestions(results: Array<SuggestionsInfo>?) {
                results?.firstOrNull()?.let { info ->
                    // RESULT_NO_ERROR表示单词拼写正确,是真实英文单词
                    val isRealWord = info.resultCode == SuggestionsInfo.RESULT_NO_ERROR
                    resultCallback?.invoke(isRealWord)
                } ?: resultCallback?.invoke(false)
                spellCheckerSession?.close()
                spellCheckerSession = null
            }

            override fun onGetSentenceSuggestions(results: Array<SentenceSuggestionsInfo>?) {
                // 单个单词检查不需要处理这个回调
            }
        }

        spellCheckerSession = SpellCheckerSession(
            context, null, spellChecker, true, sessionListener
        )
        spellCheckerSession?.getSuggestions(arrayOf(word), 1)
    }
}

使用方式:

val checker = EnglishWordChecker(context)
checker.checkIfRealEnglishWord("hello") { isReal ->
    if (isReal) {
        // 是真实英文单词
    } else {
        // 不是
    }
}

方法B:本地字典检查

如果担心系统拼写检查不可靠,可以把常用英文单词放在一个文本文件里(比如words.txt),打包到assets中,然后加载到HashSet里,直接判断是否存在:

import android.content.Context
import java.io.BufferedReader
import java.io.InputStreamReader

class LocalWordDictionary(context: Context) {
    private val englishWords = HashSet<String>()

    init {
        try {
            context.assets.open("words.txt").use { inputStream ->
                BufferedReader(InputStreamReader(inputStream)).useLines { lines ->
                    lines.forEach { word ->
                        englishWords.add(word.lowercase())
                    }
                }
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

    fun isRealEnglishWord(word: String): Boolean {
        return englishWords.contains(word.lowercase())
    }
}

内容的提问来源于stack exchange,提问作者itcnuggets

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:58:38