【问题标题】:remove all character without specefic char from string?从字符串中删除所有没有特定字符的字符?
【发布时间】:2016-01-02 01:53:56
【问题描述】:

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

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

【问题讨论】:

  • 请注意,当您将不需要的字符更改为“”时,字符串的长度会发生变化,因此您的 for 循环可能会跳过一些字符
  • @hossein 正如 Rafal 所说,您的 for 循环不符合逻辑,因为其中正在修改 temp。我在下面纠正了你的循环。

标签: java android regex string char


【解决方案1】:

你可以简单地使用

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

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

【讨论】:

  • @Pshemo,我不是 Stack Overflow 上的新手,我忘记接受了!
【解决方案2】:

在您的循环for (int i = 0 ; i &lt; 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 ;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2012-05-04
    • 2016-08-23
    相关资源
    最近更新 更多