从字符串中删除没有specefic char的所有字符?

hkh*_*114 2 java regex string android char

我有一个输入字符串,我想删除除特殊字符(十六进制字符)以外的所有字符!像这样 :

   String SpecialChar = "0123456789ABCDEF" ; // Hex Char 
   String input = "abdf%$%23%&373D^!Bfg(g)*a" ;
Run Code Online (Sandbox Code Playgroud)

我想要低于输出,但我得到错误的价值......

   String output = "abdf23373DBfgga" ;
Run Code Online (Sandbox Code Playgroud)

我写下面的方法,但它返回错误的值:

private String EliminateExtra(String str) {
    String temp = str.toUpperCase(); 

    for (int i = 0 ; i < temp.length() ; i++) {
        char c = temp.charAt(i);
        if(!isHexNum(c)) {
            temp = temp.replaceAll(String.valueOf(c) , "");
        }
    }
    return temp ;
}

private Boolean isHexNum(char c) {
    char[] charArray = "0123456789ABCDEF".toCharArray();
    for(int y=0 ; y<charArray.length ; y++) {
        if(charArray[y]==c) {
            return true ;
        }
    }
    return false ;
} 
Run Code Online (Sandbox Code Playgroud)

并称之为:

  String Data = "aaaDffagDDSGw!$!@$3513rX12433r1ADSfX&)&*)%(%8u4w" ;
  TextView tv = (TextView) findViewById(R.id.regex_textView1) ;
  tv.setText("Original:" + "\n" + Data.toUpperCase() + "\n" + "Result: " + "\n" + EliminateExtra(Data));
Run Code Online (Sandbox Code Playgroud)

Psh*_*emo 5

你可以简单地使用

private String EliminateExtra(String str) {
    return str.replaceAll("[^a-fA-F0-9]","");
}
Run Code Online (Sandbox Code Playgroud)

replaceAll使用正则表达式来查找匹配并将其替换为其他内容.在这种情况下,它将尝试查找所有不在否定字符类中 描述的范围内的字符[^...],并用空字符串替换它们(这意味着它将它们删除).