Существует несколько способов сделать это, в зависимости от того, что именно вы хотите сделать.
Если (как говорится в вопросе) вы хотите удалить все символы, которые не являются «AZ, 0-9», и символы, которые можно ввести с помощью клавиши смены и числа, например! И @ », способ построить шаблон регулярного выражения, которое соответствует символы, которые не требуется удалить, и использовать 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]#\$%\^&\*\(\)]
.
Если то, что вы хотите, чтобы удалить все символы, которые не входят в набор ASCII 127 символов, вы можете использовать тот факт, что для этих персонажей, 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