Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否从字符串中删除所有不带specefic字符的字符?_Java_Android_Regex_String_Char - Fatal编程技术网

Java 是否从字符串中删除所有不带specefic字符的字符?

Java 是否从字符串中删除所有不带specefic字符的字符?,java,android,regex,string,char,Java,Android,Regex,String,Char,我有一个输入字符串,我想删除除特殊字符(十六进制字符)以外的所有字符!像这样: String SpecialChar = "0123456789ABCDEF" ; // Hex Char String input = "abdf%$%23%&373D^!Bfg(g)*a" ; 我想有下面的输出,但我得到了错误的值 String output = "abdf23373DBfgga" ; 我写了下面的方法,但它返回了错误的值: private String Elimi

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

   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 ;
} 
你可以简单地使用

private String EliminateExtra(String str) {
    return str.replaceAll("[^a-fA-F0-9]","");
}
replaceAll
使用正则表达式查找匹配项并将其替换为其他内容。在这种情况下,它将尝试查找所有不在
[^…]
中描述的范围内的字符,并用空字符串替换它们(这意味着它将删除它们)。

在循环中
for(int i=0;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 ;
}
private静态字符串消除器extra(String str){
字符串temp=str.toUpperCase();
字符串结果=新字符串();//创建结果字符串
对于(int i=0;i
请注意,当您将不需要的字符更改为“”时,字符串的长度正在更改,因此for循环可能会跳过一些字符chars@hossein正如Rafal所说,您的for循环不符合逻辑,因为其中的temp正在被修改。我在下面更正了您的循环。@Pshemo,我不是堆栈溢出的新手,我忘记接受它了!
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 ;
}