如何在JAVA中从字符串中删除转义字符

10

我有一个输入字符串,例如 "\\{\\{\\{testing}}}",我想要移除所有的"\"。需要的输出结果为:"{{{testing}}}"

我使用以下代码来完成此操作。



string inputString = "\\{\\{\\{testing}}}";
string outputString = inputString.Replace("\\", "");
protected String removeEscapeChars(String regex, String remainingValue) {
    Matcher matcher = Pattern.compile(regex, Pattern.CASE_INSENSITIVE).matcher(remainingValue);
    while (matcher.find()) {
        String before = remainingValue.substring(0, matcher.start());
        String after = remainingValue.substring(matcher.start() + 1);
        remainingValue = (before + after);
    }
    return remainingValue;
}

我正在传递正则表达式"\\\\{.*?\\\\}"

代码只对第一个"\{"的出现有效,而不是所有的出现。 针对不同输入,看到以下输出。

  1. i/p : "\\{testing}" - o/p: "{testing}"
  2. i/p : "\\{\\{testing}}" - o/p: "{\\{testing}}"
  3. i/p : "\\{\\{\\{testing}}}" - o/p: "{\\{\\{testing}}}"

我希望从传递的 i/p 字符串中删除"\",并将所有"\\{"替换为"{"

我认为问题出在正则表达式值上,即"\\\\{.*?\\\\}"

是否有人能让我知道应该使用什么正则表达式值来获得所需的输出。


为什么不直接使用 **replaceAll("\", "")**,你也可以添加其他字符到它里面... - ramsinb
你是将 "\\{testing}""\{testing}" 作为输入传递吗?最后一个无法编译。 - J.A.I.L.
我的输出结果如下所示: i/p: "\\{testing}" - o/p: "\testing}" i/p: "\\{\\{testing}}" - o/p: "\\{testing}}" i/p: "\\{\\{\\{testing}}}" - o/p: "\\{\{testing}}}" - J.A.I.L.
也许我没有理解你的问题,但是似乎replaceAll方法可以解决它。以下是一个示例,将删除字符'', '|'和'/':replaceAll("[\\][|][/]*", "") - ramsinb
@J.A.I.L. 抱歉,如果我不小心更改了问题的内容。只是想改进结构。 - Baz
显示剩余2条评论
4个回答

11

为什么不直接使用String#replace方法?

String noSlashes = input.replace("\\", "");

或者,如果你需要仅在反斜杠出现在左花括号前时才将其删除:

String noSlashes = input.replace("\\{", "{");

该方法是通用方法,我正在使用它来转义不同的字符。我将根据要删除的字符构建正则表达式值。在这里,我的代码仅适用于第一次出现而不是其他情况。 - MIM
@user1073430 我的意思是你似乎在重写一个已经存在的方法。如果你想使用正则表达式,也可以使用 replaceAll - assylias

2
它应该像以下这样简单:

String result = remainingValue.replace("\\", "");

1

正如之前所回答的那样,如果您只想在{之前删除反斜杠\,最好的方法就是使用

String noSlashes = input.replace("\\{", "{");

但是在您的问题中,您问道有谁可以告诉我应该是什么正则表达式值。如果您使用正则表达式是因为您想要删除\不仅仅是在任何{之前,而是只有在那些后面用}正确关闭的{中,那么答案是:不行。您无法使用正则表达式匹配嵌套的{}


-2

修改正则表达式:"\\&([^;]{6})"

private String removeEscapeChars(String remainingValue) {
        Matcher matcher = Pattern.compile("\\&([^;]{6})", Pattern.CASE_INSENSITIVE).matcher(remainingValue);
        while (matcher.find()) {
            String before = remainingValue.substring(0, matcher.start());
            String after = remainingValue.substring(matcher.start() + 1);
            remainingValue = (before + after);
        }
        return remainingValue;
    }

应该可以工作。


3
你正在回答什么问题? - Toto
这是 Toto 的问题: "如何在 JAVA 中从字符串中删除转义字符?" - Suman Kumar Kola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接