我有一个输入字符串,我想删除除特殊字符(十六进制字符)以外的所有字符!像这样:
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));
答案 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 ;
}