如何检测字符串是否包含除英文字母以外的其他语言字母?

时间:2016-07-03 06:41:34

标签: java string character-encoding char special-characters

考虑如下一行:

[Hello簲  bye 簲 ]

此行包含中英文字母,不符合我的利益。所以我想知道如果一个字符串没有任何语言'英文以外的字母。任何的想法?

修改 我不想用regex来解决它。否则我会标记它!

3 个答案:

答案 0 :(得分:0)

https://docs.oracle.com/javase/7/docs/api/java/lang/Character.html

在课堂上,有这样的:

getNumericValue(char ch) 返回指定的Unicode字符表示的int值。

我相信你可以做更多的研究来找到英文字母的unicode值,这样你就可以检查char的值是否在英文字符范围内。

答案 1 :(得分:0)

如果您不想使用正则表达式,可以使用下面的

    String str = "Hello簲  bye 簲";
    boolean isValid = true;
    for (char c : str.toCharArray()) {
        if (!(c >= 'a' && c <= 'z') && !(c >= 'A' && c <= 'Z')) {
            isValid = false;
            break;
        }
    }
    System.out.println(isValid);

答案 2 :(得分:-1)

您可以在此程序中使用所有英文字符的 ASCII 值 - 数字,大写和小写字母(以及必须检查空格)。

逻辑:遍历字符串的每个字符并检查当前字符是否为英文字符,即 ASCII 值位于 48之间57 (对于数字0 - 9), 65和90 (对于大写字母)或 97和122 (对于小写字母)或是<强>空白。如果不是这些中的任何一个,那么它就是非英语字符。

以下是代码:

String s = <-- THE STRING
int illegal = 0; //to count no. of non english characters
for(int i=0; i< s.length(); i++){
    int c = (int)s.charAt(i);
    if(!((c>=48 && c<=57)||(c>=65 && c<=90)||(c>=97 && c<=122)||((char)c == ' ')))
        illegal++;
}
if(illegal > 0)
System.out.print("String contains non english characters");
else
System.out.print("String does not contain non english characters");

注意:确保您运行该程序的平台支持这些字符。 中文字符编码Unicode(Unicode支持几乎所有语言)或UTF-16。确保在运行程序时使用此{甚至UTF-32编码,并且如果不是UTF-16/32,则平台支持Unicode

我在计算机上使用以下测试数据测试了此代码:

String s = "abcdEFGH 745401 妈妈";

我在Unicode上运行时得到了正确的输出。在不支持UnicodeUTF-16/32的平台上,编译器会将中文字母妈妈视为??????,并且可能会在程序中产生错误。在执行期间,系统将成为??????的中文字母将被忽略,因此我测试的上述输入的输出将为String does not contain non English characters,这是错误的。因此,如果您在在线终端/ IDE或移动电话上运行程序,请务必注意这一因素。如果您在Windows / Mac计算机上运行它,则无需担心。

我希望它可以帮到你。