有人能给我建议如何在Java
中检查一个String
是否包含全角字符吗?全角字符是特殊字符。
String
中的全角字符:
abc@gmail.com
String
中的半角字符:
abc@gmail.com
有人能给我建议如何在Java
中检查一个String
是否包含全角字符吗?全角字符是特殊字符。
String
中的全角字符:
abc@gmail.com
String
中的半角字符:
abc@gmail.com
我不确定您是在寻找任何还是所有功能,因此以下是两种功能:
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._]*");
}
str.matches("[\\uff01-\\uff5E]*")
应该可以做到。如果不能,那可能是因为它并不是全部都是全角字符,就像你发布的示例一样。 - weston您可以比较 UNICODE
。由于字母(a-z)的unicode值为97-122
,因此您可以轻松区分两者。
String str="abc@gmail.com";
System.out.println((int)str.charAt(0));
输入
abc@gmail.com
输出
65345
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;
}
半角:1个字节
全角:> 1个字节(2、3、4..字节)
-> 比较:字符串长度 == 字节长度
String strCheck = "abc@gmail.com";
if (str.length() != str.getBytes().length) {
// is Full Width
} else {
// is Half Width
}
在这里使用正则表达式。 \W 用于检查非单词字符。
如果以下语句返回 true,则 str 将包含全角字符:
boolean flag = str.matches("\\W");