2012-02-25 35 views
9

我想知道是否有方法检测用户的输入是否在希腊语字符集中。检测字符串/用户输入语言

编辑:
只是要更清楚,我需要认识到语言的用户类型,而不是手机的语言环境。

例如,我的手机是英文的,假设我的键盘是俄文的,getDefault()返回“en”,但我需要在那个位置有“ru”。


我不知道这是不是可以出于Android,也许一个办法盒子的识别字符串的字符代码,看看是否是英文字母或其他。这点有什么意思?

我想象像
if character belongs to K then is English
(where K is the essemble of english characters)


解决方案:

最后我用正则表达式来确定字符串是英文。

String pattern = "^[A-Za-z0-9. ]+$"; 
if (string.matches(pattern) 
    // is English 
else 
    // is not English 

如果有人必须提出更好的解决方案,我会将其标记为答案。

+0

正在运行的IME应符合用户的语言环境。如果没有,我不知道是否有什么 - 作为一个应用程序开发人员 - 你可以做检测/纠正它。 – Pedantic 2012-02-25 09:15:31

回答

3
Locale.getDefault().getLanguage().equals("gr") 

在其他的方式:

contains(Charset) 

编辑:

经过一番更多的浏览时间,我所遇到的CharsetDetectorCharacter Set Detection

在这里你有方法detect(),但我不知道如何可以使用最好的。

+0

感谢您的回答。我想这个返回手机的语言环境。我需要键盘/输入字符串语言的当前语言环境。 – Vame 2012-02-25 08:57:16

0

正如Siva所建议的那样,您可以检查用户的语言环境。

在Android中,可以使用Locale.getDefault()来完成此操作。虽然我不会严格地将它与2个字母的代码进行比较,但目前的Android实现是一个2字母的语言代码,一个下划线和一个两个字母的国家代码。即,de_US将是German as spoken in the United States

这不是行业的发展方向,而是Java 6以来支持最好的模式。Java 7一旦被Android支持,应该支持更具前景的ISO 639 alpha-3代码。

+0

谢谢。请参阅编辑的问题。 – Vame 2012-02-25 09:08:42

5

您可以使用以下方法,而不是模式匹配:

boolean isEnglish = true; 
for (char c : s.toCharArray()) { 
    if (Character.UnicodeBlock.of(c) != Character.UnicodeBlock.BASIC_LATIN) { 
    isEnglish = false; 
    break; 
    } 
} 
+0

谢谢你这么多darkmist ....这是我需要...我只需要知道isEnglish或不.. – praveenb 2012-05-11 08:57:38