如何确定字符串是英语还是波斯语?

时间:2014-04-13 07:56:55

标签: java android

我在表单中有edittext,我想当用户输入文本到edittext我的程序检测到语言插入到edittext

有没有办法确定字符串是英文还是波斯文?

我找到了这个阿拉伯语的代码

public static boolean isProbablyArabic(String s) {
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) {
    int c = s.codePointAt(i);
    if (c >= 0x0600 && c <=0x06E0)
        return true;
}
return false;
}

但是如何为波斯语更改此代码?

6 个答案:

答案 0 :(得分:2)

波斯语(也用于乌尔都语)字母表的所有可能的Unicode范围:

答案 1 :(得分:2)

使用Regex可以知道字符串是英语或波斯语。

public static final Pattern VALID_NAME_PATTERN_REGEX = Pattern.compile("[a-zA-Z_0-9]+$");

public static boolean isEnglishWord(String string) {
    return VALID_NAME_PATTERN_REGEX.matcher(string).find();
}

这只适用于单词和数字。如果有一个像&#39; =&#39;或&#39; +&#39; ,该函数将返回false。您可以通过编辑正则表达式来匹配您需要的内容来解决这个问题。

答案 2 :(得分:1)

为什么不在键盘弹出时对它进行评估..手段 你可以通过获取手机的语言来实现...这里的方法是useLocale.getDefault()。getDisplayLanguage(); minSDK是11是必需的。

答案 3 :(得分:1)

除非您真的很复杂,否则没有确切的方法来确定您的用户输入的语言,因此您提供的方法示例称为isProbablyArabic而不是isArabic }。如果您的用户只使用英语或波斯语写作,那么一个选项就是使用一个正则表达式来查看用户的文本是否包含西方罗马字符("^[a-zA-Z]*$"),如果这样做会返回false我们可以假设他们用波斯语输入,但它可能是任何使用不同字符集的东西。

答案 4 :(得分:1)

试试这个方法

public static boolean textIsPersian(String s) {
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) {
    int c = s.codePointAt(i);
    if (c >= 0x0600 && c <=0x06FF || c== 0xFB8A || c==0x067E || c==0x0686 || c==0x06AF)
        return true;
}
return false;

它基于this答案。 或者,您可以使用Guido Mocha的答案中给出的范围:

public static boolean textIsPersian(String s) {
for (int i = 0; i < Character.codePointCount(s, 0, s.length()); i++) {
    int c = s.codePointAt(i);
    if ((c >= 0x0600 && c <=0x06FF) || (c>=0xFB50 && c<=0xFDFF) || (c>=0xFE70 && c<=0xFEFF) )
        return true;
}
return false;
}

答案 5 :(得分:0)

使用字符范围不是检测某些重叠范围的语言的完美方式,例如阿拉伯语,波斯语和乌尔都语。但是,如果你坚持这种方式,我的建议是寻找特定于语言的特殊字符。例如,گ或پ是波斯语,但不是阿拉伯语。另一方面,Æ或É在阿拉伯语文本中可能比波斯语更常见。通过计算这些特定字符,您可以区分阿拉伯语,波斯语和乌尔都语。

虽然我从上述方法中得到了很好的结果,但使用n-gram来检测语言更受欢迎和可靠。有许多库通过这种方法进行语言检测任务。