删除String Java中不需要的字符

时间:2015-01-30 13:40:55

标签: java regex string stringbuilder

我正在尝试编写一个以String为输入的简单程序。如果Stringregex表达式匹配,则返回该表达式。如果没有,我需要经历它,找到导致问题的每个字符并将其删除。

我遇到的问题是我使用基于for loop长度的String,但每次移除char时,长度都会发生变化,因此缩短for循环。当for循环完成一半时,最终会导致索引超出范围错误。

输入 “09fdghdghh0” - (应该返回'090')

public String cleanID(String id){
        System.out.println("id = " + id);
        //String strRegex = "[a-zA-Z]+";
        String numRegex = "[0-9]+";

        StringBuilder sb = new StringBuilder(id);

        System.out.println(sb.toString());

        if(id.matches(numRegex)){
            return sb.toString();
        }else{
            for(int i = 0; i < id.length(); i++){
                System.out.println("sb length = " + sb.length());
                if(!Character.toString(sb.charAt(i)).matches(numRegex)){
                    System.out.println(sb.charAt(i));
                    sb.deleteCharAt(i);
                }
            }
        }
return sb.toString();

输出

sb length = 11
sb length = 11
sb length = 11
f
sb length = 10
g
sb length = 9
d
sb length = 8
h
sb length = 7
sb length = 7
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 7

正如你所看到的那样,循环失败了一半。除了for循环之外,还有更好的方法吗?或者我只是遗漏了一些明显的东西?

感谢。

4 个答案:

答案 0 :(得分:3)

这样的正则表达式会有所帮助:

public static void main(String[] args) {
    String s = "09fdghdghh0";
    System.out.println(s.replaceAll("\\D", "")); // \\D removes everything which is not a number
}

O / P

090

答案 1 :(得分:1)

我认为你最好的选择是使用模式和匹配类

//Regex goes here
Pattern p = Pattern.compile("[0-9]+");
//Your string goes here
Matcher m = p.matcher(id);

if (m.find()) {
    System.out.println(m.group(1));

}

这应该提取你想要的任何文字。

答案 2 :(得分:0)

我会将replaceAll与负正则表达式一起使用,然后与原始版本进行比较。

例如:

String text = "10";
System.out.println(text.replaceAll("[^0-9]", " ").equals(text));

答案 3 :(得分:0)

另一种方法是遍历整个字符串,然后将正确的值(而不是删除错误的值)添加到resultString