我想删除这些特殊字符:☺☼
我只想要字符A-Z,0-9和可以使用shift键和数字键入的符号,例如!和@。
以下是我现在拥有的代码,如果字符串包含其他语言的字符,则只返回true。
public static boolean hasSymbols(String v) {
boolean b = false;
byte bytearray [] = v.getBytes();
CharsetDecoder d = Charset.forName("US-ASCII").newDecoder();
try {
CharBuffer r = d.decode(ByteBuffer.wrap(bytearray));
r.toString();
} catch (Exception e) {
return true;
}
return b;
}
答案 0 :(得分:0)
有几种方法可以做到这一点,具体取决于你想要做什么。
如果(如问题所示)你要删除所有不是“AZ,0-9的字符,以及可以使用shift键和数字输入的符号,例如!和@”,最好的方法是构造一个与您不想删除的字符匹配的正则表达式模式,并使用String.matches(String)
和String.replaceAll(String, String)
方法:
private static final String NON_NORMAL_CHARACTERS_PATTERN = "\\W|[^!@#\\$%\\^&\\*\\(\\)]";
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]字符外的所有内容都与[^!@#\$%\^&\*\(\)]
匹配。
如果你想要的是删除所有不在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();
}