Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何确定字符串是英语还是波斯语?_Java_Android - Fatal编程技术网

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

Java 如何确定字符串是英语还是波斯语?,java,android,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);

我有一个表单中的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;
}
public静态布尔值isProbablyArabic(字符串s){
对于(int i=0;i如果(c>=0x0600&&c为什么不在键盘弹出时对其进行评估..意味着
您可以通过获取phone的语言来实现这一点……这里是方法useLocale.getDefault().getDisplayLanguage();

minSDK是11是必需的。

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


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

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

  • 所以,如果你不想错过任何字符检查所有范围。希望能帮助你


除非你变得非常复杂,否则没有确切的方法来确定你的用户输入的是什么语言,因此你给出的方法示例被称为
isProbablyArabic
,而不是
isArabic
。如果你的用户只使用英语或波斯语编写,而没有其他语言,一个选项是使用一个查看用户的文本是否包含西文罗马字符(
“^[a-zA-Z]*$”
),如果返回false,则可以假定他们是用波斯语键入的,尽管它可能是使用不同字符集的任何字符。

使用正则表达式可以知道字符串是英语还是波斯语

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。您可以通过编辑正则表达式以匹配所需内容来解决此问题。

字符代码范围对于这个简单的“非此即彼”问题可能足够强大。有关更高级的方法,请查看一些语言识别库。@tripleee什么是波斯语字符代码范围?@tripleee但我使用波斯语或英语,阿拉伯语与波斯语有些不同。如果您希望波斯语输入不使用阿拉伯语脚本,您将需要更新您的问题的更多细节。但可能用户复制并粘贴文本!如果您的应用程序联机,程序minSDK为8…请尝试使用google translation API,您可以根据下面的标准unicode设置url更改这些unicode点0x0600。。。。