如何检查String中是否包含全角字符

Kum*_*mar 6 java string character special-characters

任何人都可以建议我如何检查是否String包含全角字符Java?全角的字符是特殊字符.

字符串中的全角字符:

?????????.???

字符串中的半角字符:

abc@gmail.com

wes*_*ton 5

我不确定您是否正在寻找其中一个或全部,因此以下是两者的功能:

\n\n
public static boolean isAllFullWidth(String str) {\n    for (char c : str.toCharArray())\n      if ((c & 0xff00) != 0xff00)\n        return false;\n    return true;\n}\n\npublic static boolean areAnyFullWidth(String str) {\n    for (char c : str.toCharArray())\n      if ((c & 0xff00) == 0xff00)\n        return true;\n    return false;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

至于你的半宽\'.\'也有可能\'_\'。首先将它们删除并进行替换:

\n\n
String str="\xef\xbd\x81\xef\xbd\x82\xef\xbd\x83\xef\xbc\xa0\xef\xbd\x87\xef\xbd\x8d\xef\xbd\x81\xef\xbd\x89\xef\xbd\x8c.\xef\xbd\x83\xef\xbd\x8f\xef\xbd\x8d";\n\nif (isAllFullWidth(str.replaceAll("[._]","")))\n  //then apart from . and _, they are all full width\n
Run Code Online (Sandbox Code Playgroud)\n\n

正则表达式

\n\n

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

\n\n
[\\uFF01-\\uFF5E]\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以该方法看起来像:

\n\n
public static boolean isAllFullWidth(String str) {\n    return str.matches("[\\\\uff01-\\\\uff5E]*");\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

您可以向其中添加其他字符,因此不需要删除它们:

\n\n
public static boolean isValidFullWidthEmail(String str) {\n    return str.matches("[\\\\uff01-\\\\uff5E._]*");\n}\n
Run Code Online (Sandbox Code Playgroud)\n


Nee*_*ain 2

您可以比较UNICODE 由于字母表 (az) 的 unicode 是97-122,因此您可以轻松区分两者

\n\n
String str="\xef\xbd\x81\xef\xbd\x82\xef\xbd\x83\xef\xbc\xa0\xef\xbd\x87\xef\xbd\x8d\xef\xbd\x81\xef\xbd\x89\xef\xbd\x8c.\xef\xbd\x83\xef\xbd\x8f\xef\xbd\x8d";\nSystem.out.println((int)str.charAt(0));\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于输入

\n\n
\xef\xbd\x81\xef\xbd\x82\xef\xbd\x83\xef\xbc\xa0\xef\xbd\x87\xef\xbd\x8d\xef\xbd\x81\xef\xbd\x89\xef\xbd\x8c.\xef\xbd\x83\xef\xbd\x8f\xef\xbd\x8d\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出

\n\n
65345\n
Run Code Online (Sandbox Code Playgroud)\n