2015-04-18 53 views
0

我想刪除這樣的任何特殊字符:☺☼的Java避免特殊字符

我只想字符AZ,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

@galdre nope,該問題要求刪除所有「非字母數字字符」,而在這裏OP要求刪除「特殊字符」(非ASCII碼,如果由代碼判斷)。 – alfasin

+0

是的,但它非常接近 - 兩個問題之間沒有什麼實質性差異,只是表面上的差異。 – galdre

回答

0

有幾種方法可以做到這一點,具體取決於你想要做什麼。

如果(如問題所述)您想刪除所有不是「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(); 
} 
+0

這些都不起作用。對於第一種方法,如果字符串中只有一個字符,則它將返回true。在第二種方法中,它工作得更好一些,但字母或數字以外的任何內容都會返回-1。它給出的數字也與在線找到的任何ASCII表不匹配。對於1,它返回1等。 – user3566858