Английские символы обычно находятся в этих 4 блоках Юникода:
ArrayList<Character.UnicodeBlock> english = new ArrayList<>();
english.add(Character.UnicodeBlock.BASIC_LATIN);
english.add(Character.UnicodeBlock.LATIN_1_SUPPLEMENT);
english.add(Character.UnicodeBlock.LATIN_EXTENDED_A);
english.add(Character.UnicodeBlock.GENERAL_PUNCTUATION);
Так что, если у вас есть строка, вы можете перебрать все символы и посмотреть, в каком блоке Юникода находится каждый символ:
for (char currentChar : myString.toCharArray())
{
Character.UnicodeBlock unicodeBlock = Character.UnicodeBlock.of(currentChar);
if (english.contains(unicodeBlock))
{
// This character is English
}
}
Если они все английские, значит, вы знаете, что у вас есть символы, которые все английские. Вы можете повторить это для любого языка; вам просто нужно выяснить, какие Unicode блокирует каждый язык.
Примечание. Это НЕ означает, что вы доказали, что является английским языком. Вы только что доказали, что он использует символы, найденные на английском языке. Это может быть французский, немецкий, испанский или другие языки, символы которых во многом совпадают с английским.
Существуют и другие способы определения реального естественного языка. Библиотеки типа langdetect, которые я использовал с большим успехом, могут сделать это для вас:
https://code.google.com/p/language-detection/