有没有办法确定字符串是英文还是阿拉伯文?
答案 0 :(得分:37)
这是我刚试过的一个简单逻辑:
public static boolean isProbablyArabic(String s) {
for (int i = 0; i < s.length();) {
int c = s.codePointAt(i);
if (c >= 0x0600 && c <= 0x06E0)
return true;
i += Character.charCount(c);
}
return false;
}
当且仅当在文本中找到阿拉伯语unicode代码点时,它才将文本声明为阿拉伯语。您可以增强此逻辑以更适合您的需求。
范围0600 - 06E0是阿拉伯字符和符号的代码点范围(请参阅Unicode tables)
答案 1 :(得分:9)
Java本身支持unicode的各种语言检查,也支持阿拉伯语。更简单,最简单的方法是使用UnicodeBlock
public static boolean textContainsArabic(String text) {
for (char charac : text.toCharArray()) {
if (Character.UnicodeBlock.of(charac) == Character.UnicodeBlock.ARABIC) {
return true;
}
}
return false;
}
答案 2 :(得分:5)
包含所有阿拉伯字符和符号范围的微小更改
private boolean isArabic(String text){
String textWithoutSpace = text.trim().replaceAll(" ",""); //to ignore whitepace
for (int i = 0; i < textWithoutSpace.length();) {
int c = textWithoutSpace.codePointAt(i);
//range of arabic chars/symbols is from 0x0600 to 0x06ff
//the arabic letter 'لا' is special case having the range from 0xFE70 to 0xFEFF
if (c >= 0x0600 && c <=0x06FF || (c >= 0xFE70 && c<=0xFEFF))
i += Character.charCount(c);
else
return false;
}
return true;
}
答案 3 :(得分:3)
您通常可以通过字符串本身中的代码点来判断。阿拉伯语占用Unicode代码空间中的certain blocks。
这是一个相当安全的赌注,如果这些块中存在相当大比例的字符(例如بلدي الحوامات مليء الثعابينة
),那就是阿拉伯语文本。
答案 4 :(得分:0)
您可以使用基于N-gram的文本分类(谷歌用于该短语)但它不是防错技术,并且可能需要一个不太短的字符串。
您可能还认为只有ASCII字母的字符串不是阿拉伯语。
答案 5 :(得分:0)
英语字符通常位于以下4个Unicode块中:
GENERAL_PUNCTUATION
public static boolean isEnglish(String text) {
boolean onlyEnglish = false;
for (char character : text.toCharArray()) {
if (Character.UnicodeBlock.of(character) == Character.UnicodeBlock.BASIC_LATIN
|| Character.UnicodeBlock.of(character) == Character.UnicodeBlock.LATIN_1_SUPPLEMENT
|| Character.UnicodeBlock.of(character) == Character.UnicodeBlock.LATIN_EXTENDED_A
|| Character.UnicodeBlock.of(character) == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
onlyEnglish = true;
} else {
onlyEnglish = false;
}
}
return onlyEnglish;
}
答案 6 :(得分:0)
This answer有点正确。但是,当我们将波斯语和英语字母组合在一起时,它会返回 TRUE !,这是不正确的。 在这里,我修改了相同的方法,以使其正常工作
public static boolean isProbablyArabic(String s) {
for (int i = 0; i < s.length();) {
int c = s.codePointAt(i);
if (!(c >= 0x0600 && c <= 0x06E0))
return false;
i += Character.charCount(c);
}
return true;
}
答案 7 :(得分:-1)
试试这个:
internal static bool ContainsArabicLetters(string text)
{
foreach (char character in text.ToCharArray())
{
if (character >= 0x600 && character <= 0x6ff)
return true;
if (character >= 0x750 && character <= 0x77f)
return true;
if (character >= 0xfb50 && character <= 0xfc3f)
return true;
if (character >= 0xfe70 && character <= 0xfefc)
return true;
}
return false;
}