Java防止特殊字符

时间:2015-04-18 02:20:20

标签: java character

我想删除这些特殊字符:☺☼

我只想要字符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;
}

1 个答案:

答案 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();
}