有幾種方法可以做到這一點,具體取決於你想要做什麼。
如果(如問題所述)您想刪除所有不是「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