如何在Java中检查字符串是否包含全角字符

8

有人能给我建议如何在Java中检查一个String是否包含全角字符吗?全角字符是特殊字符。

String中的全角字符:

abc@gmail.com

String中的半角字符:

abc@gmail.com

contains方法会告诉你。遍历一个只包含“全角字符”的字符串,并对每个字符运行contains方法。 - Stultuske
是的,我也以那种方式检查过了。但是代码看起来很乱。然而,在上述情况中,我正在检查电子邮件。因此,我必须检查一些额外的字符,例如@、.、_等。 - Kumar
你是想要“全部”全角字符,还是“任意一个”全角字符?也就是说,当混合使用全角和半角字符时,你想得到什么结果? - weston
我想检查字符串是否包含任何全角字符,这些字符可能是字母、数字或特殊字符。 - Kumar
5个回答

5

我不确定您是在寻找任何还是所有功能,因此以下是两种功能:

public static boolean isAllFullWidth(String str) {
    for (char c : str.toCharArray())
      if ((c & 0xff00) != 0xff00)
        return false;
    return true;
}

public static boolean areAnyFullWidth(String str) {
    for (char c : str.toCharArray())
      if ((c & 0xff00) == 0xff00)
        return true;
    return false;
}

关于你的半角点'.'和可能的下划线'_'。 可以先使用replace将它们去掉:

String str="abc@gmail.com";

if (isAllFullWidth(str.replaceAll("[._]","")))
  //then apart from . and _, they are all full width

正则表达式

如果你想使用正则表达式进行测试,那么这是全角字符的实际字符范围:

[\uFF01-\uFF5E]

那么方法看起来就像这样:
public static boolean isAllFullWidth(String str) {
    return str.matches("[\\uff01-\\uff5E]*");
}

您可以将其他字符添加到其中,无需剥离它们:
public static boolean isValidFullWidthEmail(String str) {
    return str.matches("[\\uff01-\\uff5E._]*");
}

谢谢你的代码。但是我不能忽略“。”,“_”和任何特殊字符。因为它们也可以是全角的。请问您能告诉我包括特殊字符在内的全角Unicode范围吗? - Kumar
1
你的示例中没有包括全角句号的完整版本。我已经为你提供了全角字符的完整范围。 - weston
str.matches("[\\uff01-\\uff5E]*") 应该可以做到。如果不能,那可能是因为它并不是全部都是全角字符,就像你发布的示例一样。 - weston

2

您可以比较 UNICODE。由于字母(a-z)的unicode值为97-122,因此您可以轻松区分两者。

String str="abc@gmail.com";
System.out.println((int)str.charAt(0));

输入

abc@gmail.com

输出

65345

1
感谢您的回复。但是,在检查电子邮件字符串时,需要同时考虑'@'以及“。”,“_”等字符。是否有可以进行隐式检查的方法? - Kumar
#Neeraj:请问您能否告诉我所有全角字符的Unicode范围。 - Kumar

2
您可以尝试类似以下这样的代码:
public static final String FULL_WIDTH_CHARS = "AaBbCcDdEeFfGgHhIiJj"
                      + "KkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

public static boolean containsFullWidthChars(String str) {
    for(int i = 0; i < FULL_WIDTH_CHARS.length(); i++) {
        if(str.contains(String.valueOf(FULL_WIDTH_CHARS.charAt(i)))) {
            return true;
        }
    }
    return false;
}

0

半角:1个字节

全角:> 1个字节(2、3、4..字节)

-> 比较:字符串长度 == 字节长度

String strCheck = "abc@gmail.com";
if (str.length() != str.getBytes().length) {
    // is Full Width
} else {
    // is Half Width
}

您的回答目前写得不是很清晰。请进行[编辑],添加更多细节以帮助其他人理解如何解决所提出的问题。您可以在帮助中心找到有关撰写好回答的更多信息。 - Community

0

在这里使用正则表达式。 \W 用于检查非单词字符。

如果以下语句返回 true,则 str 将包含全角字符:

boolean flag = str.matches("\\W");


由于我正在检查电子邮件,我需要检查是否有任何特殊字符也是全角的。 - Kumar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接