如何确定字符串是英语还是波斯语?
我有forms的edittext,我想当用户输入文本到edittext我的程序检测到语言插入edittext
有没有办法确定字符串是英文还是波斯文?
我发现这个代码为阿拉伯语
public static boolean isProbablyArabic(String s) { for (int i = 0; i = 0x0600 && c <=0x06E0) return true; } return false; }
但是如何为波斯语更改此代码?
波斯语(也用于乌尔都语)字母表的所有可能的Unicode范围:
- 0x0600到0x06FF
- 0xFB50到0xFDFF
-
0xFE70至0xFEFF
因此,如果你想不要错过任何字符检查所有范围。 希望能帮到你。
您可以使用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(); }
这只适用于单词和数字。 如果有’=’或’+’之类的字符,该函数将返回false。 你可以通过编辑正则表达式来匹配你需要的东西。
为什么不在弹出键盘时对它进行评估..意思是你可以通过获取手机的语言来实现…这里的方法是useLocale.getDefault()。getDisplayLanguage(); minSDK是11是必需的。
除非你真的很复杂,否则没有确切的方法可以确定用户输入的语言,因此你给出的方法示例称为isProbablyArabic
而不是isArabic
。 如果您的用户只使用英语或波斯语写作,那么一个选项是使用正则表达式来查看用户的文本是否包含西方罗马字符( "^[a-zA-Z]*$"
),如果这样返回false你可以假设他们输入的是波斯语,尽管它可能是任何使用不同字符集的东西。
试试这个方法
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;
这是基于这个答案。 或者,您可以使用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; }
使用字符的范围不是检测某些重叠范围的语言的完美方式,例如阿拉伯语,波斯语和乌尔都语。 但是,如果你坚持这种方式,我的建议是寻找特定于语言的特殊字符。 例如,گ或پ是波斯语,但不是阿拉伯语。 另一方面,Æ或É在阿拉伯语文本中可能比波斯语更常见。 通过计算这些特定字符,您可以区分阿拉伯语,波斯语和乌尔都语。
虽然我从上述方法中得到了很好的结果,但使用n-gram来检测语言更受欢迎和可靠。 有许多库通过这种方法进行语言检测任务。