有几种方法可以做到这一点,具体取决于你想要做什么。
如果(如问题所述)您想删除所有不是“AZ,0-9,以及可以使用shift键和一个数字键入的符号,如!和@”的所有字符,则最好方法是构建一个你不想删除字符相匹配的正则表达式模式,并使用String.matches(String)
和String.replaceAll(String, String)
方法:
private static final String NON_NORMAL_CHARACTERS_PATTERN = "\\W|[^[email protected]#\\$%\\^&\\*\\(\\)]";
public static boolean hasSymbols(String string) {
return string.matches(NON_NORMAL_CHARACTERS_PATTERN);
}
public static String removeSymbols(String string) {
return string.replaceAll(NON_NORMAL_CHARACTERS_PATTERN, "");
}
以上称为NON_NORMAL_CHARACTERS_PATTERN
匹配非单词字符\W
,一切模式除了Shift + [0-9]字符与[^[email protected]#\$%\^&\*\(\)]
。
如果你想要的是去除不在127的ASCII字符集的所有字符,你可以利用一个事实,即这些字符,Character.getNumericValue(char)
将始终小于或等于127:
public static boolean isNonASCII(char character) {
return Character.getNumericValue(character) > 127;
}
public static boolean hasNonASCII(String string) {
for (char currentChar : string.toCharArray()) {
if (isNonASCII(currentChar)) {
return false;
}
}
return true;
}
public static String removeNonASCII(String string) {
StringBuilder stringBuilder = new StringBuilder();
for (char currentChar : string.toCharArray()) {
if (!isNonASCII(currentChar)) {
stringBuilder.append(currentChar);
}
}
return stringBuilder.toString();
}
你是要求代码去除角色,还是要问你的功能是否是检测它们的好方法? –
@galdre nope,该问题要求删除所有“非字母数字字符”,而在这里OP要求删除“特殊字符”(非ASCII码,如果由代码判断)。 – alfasin
是的,但它非常接近 - 两个问题之间没有什么实质性差异,只是表面上的差异。 – galdre