首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >交换转义字符

交换转义字符
EN

Stack Overflow用户
提问于 2020-10-30 00:16:23
回答 2查看 47关注 0票数 1

我尝试交换字符串A * (B + C) / D中的圆括号,但是交换它们时,结果是A * \)B + C( / D而不是A * )B + C( / D

代码语言:javascript
运行
复制
public class InfixToPrefixExpression {
        private String swapStrings(String expression, String one, String two){
    
            return Arrays.stream(expression.split(one, -1))
                         .map(s -> s.replaceAll(two, one))
                         .collect(Collectors.joining(two));
        }
        public static void main(String[] args) {
            String expression = "A * (B + C) / D";
            String result = new InfixToPrefixExpression().swapStrings(expression,
                             "\\(","\\)");
            System.out.println(result);
        }
}

如何删除出现在结果字符串中的多余反斜杠?我也尝试了下面的方法,但是String.join()方法在结果中添加了额外的斜杠。

代码语言:javascript
运行
复制
//        String[] split = expression.split(one, -1);
//        for (int i = 0; i < split.length; i++) {
//            split[i] = split[i].replaceAll(two, one);
//        }
//        String result = String.join(two, split);
EN

回答 2

Stack Overflow用户

发布于 2020-10-30 00:42:03

一种简单的交换方法可能是将"("交换为"_"之类的特殊字符,然后将")"交换为"(",最后将"_"交换为")",如下所示:

代码语言:javascript
运行
复制
    final String expression = "A * (B + C) / D";
    final String result = expression
            .replace("(", "_")
            .replace(")", "(")
            .replace("_", ")");

如果不想使用特殊字符,可以像这样将表达式拆分为一个括号:

代码语言:javascript
运行
复制
    final String expression = "A * (B + C) / D";

    final String[] substrings = expression.split("\\(");
    final List<String> replacedSubstrings = new ArrayList<>();
    for (String substring : substrings) {
        replacedSubstrings.add(substring.replace(")","("));
    }

    final String result = String.join(")", replacedSubstrings);
票数 1
EN

Stack Overflow用户

发布于 2020-10-30 00:48:42

您可能需要提供在正则表达式和Collectors.joining中使用的特殊值

代码语言:javascript
运行
复制
private static String swapStrings(String expression, String one, String two){

    String reOne = "\\" + one;
    String reTwo = "\\" + two;

    return Arrays.stream(expression.split(reOne, -1))
            .map(s -> s.replaceAll(reTwo, one))
            .collect(Collectors.joining(two));
}

则无需转义括号即可调用此方法:

代码语言:javascript
运行
复制
String expression = "A * (B + C) / D";
String result = swapStrings(expression, "(",")");

System.out.println(result);

输出:

代码语言:javascript
运行
复制
A * )B + C( / D
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64595093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档