删除字符串中不需要的字符 Java

Delete unwanted chars in a String Java

我正在尝试编写一个将 String 作为输入的简单程序。如果 String 匹配 regex 表达式,则它被 returned。如果没有,我需要检查它,找到导致问题的每个字符并将其删除。

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

输入 “09fdghdghh0”-(应该 return '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 循环之外,还有更好的方法吗?或者我只是遗漏了一些明显的东西?

谢谢。

我会使用带有负正则表达式的 replaceAll,然后与原来的进行比较。

例如:

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

我认为最好的办法是使用模式和匹配器 类

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

}

这应该会提取您想要的任何文本。

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

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

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