有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

正则表达式Java正则表达式从字符串中删除匹配项

我正在尝试找出如何从字符串中删除找到的匹配项。因此,我的代码示例当前如下所示:

public void checkText() {
    String helper = "985, 913, 123, SomeotherText, MoreText, MoreText";
    Pattern pattern = Pattern.compile("\\b\\d{3}");
    Matcher matcher = pattern.matcher(helper);
    while (matcher.find()) {
        String newtext = "Number: " + matcher.group() + "\n"+ newtext;
        helper.replaceAll(matcher.group(),"");
    }
    newtext = newtext + "________________\n"+ helper;
    editText.setText(newtext);
}

所以我的输入字符串是:985, 913, 123, SomeotherText, MoreText, MoreText

运行代码后,我希望看到以下内容:

Number: 985
Number: 913
Number: 123
________________________
SomeotherText, MoreText, MoreText

任何人都能告诉我我现在的代码有什么问题吗


共 (2) 个答案

  1. # 1 楼答案

    代码中有一些内容可以更新:

    • 您应该将替换的返回设置为helper
    • 如果只替换为空字符串,那么替换中的字符串将以, , ,开头,并留下逗号和后面的空格
    • 您可以初始化变量String newtext = "";

    见a Java demo

    您的代码可能如下所示:

    String helper = "985, 913, 123, SomeotherText, MoreText, MoreText";
    Pattern pattern = Pattern.compile("\\b\\d{3}");
    Matcher matcher = pattern.matcher(helper);
    String newtext = "";
    
    while (matcher.find()) {
        newtext = "Number: " + matcher.group() + "\n"+ newtext;
        helper = helper.replaceAll(matcher.group() + ", ","");
    }
    newtext = newtext + "________________\n"+ helper;
    System.out.println(newtext);
    

    结果:

    Number: 123
    Number: 913
    Number: 985
    ________________
    SomeotherText, MoreText, MoreText
    
  2. # 2 楼答案

    由于您已经在使用Matcher类,因此也可以使用方法Matcher.appendReplacement进行替换:

    public void checkText() {
        String helper = "985, 913, 123, SomeotherText, MoreText, MoreText";
        Pattern pattern = Pattern.compile("\\b\\d{3}, ");
        Matcher matcher = pattern.matcher(helper);
        StringBuffer sb = new StringBuffer();
        while (matcher.find()) {
            System.out.println("Number:"+matcher.group());
            matcher.appendReplacement(sb, "");
        }
        matcher.appendTail(sb);
        System.out.println(sb.toString());
    }