当前位置: 首页 > 知识库问答 >
问题:

在字符串上使用replaceAll无效[重复]

董谦
2023-03-14

我试图解决这项任务,但我失败了,因为返回不起作用。我是java新手,希望你能帮助我。

任务是删除字符串中的每个x,但不是第一个和最后一个。

public class Main {
    
     public static String stringX(String s) { 
         boolean start = s.startsWith("x");
         boolean end = s.endsWith("x");
         int end1 = s.length() - 1;
         if (start & end) { 
                s.substring(1, end1).replace("x", "");
                
            } else {
                s.replaceAll("x", "");
            }
        return s;
    }

    public static void main(String[] args) {
        String result = stringX("xxHix");
        System.out.println(result); // => xHix

        System.out.println(stringX("abxxxcd")); // => abcd
        System.out.println(stringX("xabxxxcdx")); // => xabcdx
    }
}

共有2个答案

姚才捷
2023-03-14
匿名用户

substring返回一个新字符串。它不会修改到位的字符串。您必须像这样捕获新字符串:

String newString = s.substring(1, end1).replace("x", "");

由于这行代码将位于作用域块中,因此必须在if语句之前声明newString

然后返回newString

如果,也可以从中返回新的子字符串:

return s.substring(1, end1).replace("x", "");

熊朝
2023-03-14

您正在使用的操作不会就地修改s,您需要检索更新的字符串

s = s.substring(1, end1).replace("x", "");
s = s.replaceAll("x", "");

但是子字符串replace将不起作用,因为它也删除了第一个和最后一个字符

您最好替换所有的x,然后在需要的地方添加

public static String stringX(String s) { 
     String trimmed = s.replace("x", "");
     if(s.startsWith("x"))
         trimmed = "x" + trimmed;
     if(s.endsWith("x"))
         trimmed += "x";
    return trimmed;
}

或者使用一个很好的正则表达式(?

>

  • (?

    x(?!$)是一个负前瞻,并确保x之后没有字符串结尾:x不是最后一个字符

    public static String stringX(String s) { 
        return s.replaceAll("(?<!^)x(?!$)", "");
    }
    

  •  类似资料:
    • 我正在尝试设置一个Perl脚本,该脚本将使用通过Stripe处理信用卡费用。 我能够成功请求令牌,但当我使用该令牌过帐费用时,出现以下错误: 错误:无效的\u请求\u错误-无效字符串:{“exp\u month”= 这是我的密码 我应该使用以外的东西作为卡片值吗?

    • 问题内容: 一个非常简单的问题,但这是来自C / C ++人员进入Java的复杂性的。 我知道我可以启动jUnit和自己的一些性能测试来获得答案。但我只是想知道这是否在那里。 在性能方面,String.replaceAll()和Matcher.replaceAll()(在从Regex.Pattern创建的Matcher对象上)之间是否存在已知差异? 此外,两者在高级API方面的区别是什么?(不可变

    • 问题内容: 我希望将文本“REPLACEME”替换为我的StringBuffer符号。当我打印符号时,它是一个有效的字符串。当我打印查询时,它仍然具有文本REPLACEME而不是符号。为什么? 问题答案: 更改 至: Java中的字符串被设计为不可变的。 这就是为什么不能替换当前字符串 中 的字符,因此它必须返回替换了字符的 新 字符串。 此外,如果你想简单地替换文字,不需要正则表达式的语法支持使

    • 问题内容: 线 打印一个反斜杠()。和 打印双反斜杠()。明白了! 但是为什么在以下代码中: 是输出: 代替 毕竟,该方法是将点()替换为()。 有人可以解释一下吗? 问题答案: 使用正则表达式替换字符时,您可以使用反向引用,例如使用匹配项中的分组替换。 但是,这意味着反斜杠是一个特殊字符,因此,如果您实际上想使用反斜杠,则必须对其进行转义。 这意味着在Java字符串中使用它时实际上需要对其进行两

    • 问题内容: 我需要删除字符串中的一些子字符串(在大型数据集中)。该 子常常包含特殊字符,像这样的:,^,/,…和 的replaceAll()将它们视为对正则表达式的特殊字符,如点 会匹配任何字符,这是不是我真正想要的东西。 是否有其他函数可以执行“替换”而不将第一个 参数视为正则表达式? 问题答案: 只需使用String.replace()。它的功能相同,但是它 内部处理了特殊字符的转义,以避免您

    • 本文向大家介绍Java字符串replace(),replaceFirst()和replaceAll()方法,包括了Java字符串replace(),replaceFirst()和replaceAll()方法的使用技巧和注意事项,需要的朋友参考一下 该方法 String类的replace()方法接受两个String值- 一个表示要替换的String(子字符串)部分。 另一个代表需要替换指定子字符串的