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

时间:2015-10-05 11:58:36

标签: java android regex string char

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

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

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

   String output = "abdf23373DBfgga" ;

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

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 ;
} 

并称之为:

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

2 个答案:

答案 0 :(得分:5)

你可以简单地使用

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

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

答案 1 :(得分:1)

在循环for (int i = 0 ; i < temp.length() ; i++)中,您正在修改“temp”,这会导致您的循环无法正常工作。我把你的for循环更改为;

private static String EliminateExtra(String str) {
    String temp = str.toUpperCase(); 
    String result = new String(); // create result string
    for (int i = 0 ; i < temp.length() ; i++) {
        char c = temp.charAt(i);
        if(isHexNum(c)) {
            result += String.valueOf(c); // add valid char into your result string
        }
    }
    return result ;
}