java - 为什么转义字符不能用于替换所有括号?

标签 java regex escaping

我正在尝试将所有括号替换为相对的括号,因为我在解决 Hackerrank.com 上的编码挑战时发现 here.

我认为有一个解决方案来解决这个挑战,但我似乎无法让替换所有功能在我的功能上正常工作。我尝试过使用 Pattern.quote(String)以及转义反斜杠,但由于某种原因我的括号没有被替换。

public class Solution {

    public static boolean isBalanced(String expression) {

        if(expression.length() %2 != 0) {
            return false;
        }
        else {

            int middle = expression.length() /2;
            String open = expression.substring(0,middle);
            String close = expression.substring(middle);

            close.replaceAll("\\)", "\\(");
            close.replaceAll(Pattern.quote("}"),"{");
            close.replaceAll(Pattern.quote("]"), "[");
            new StringBuilder(close).reverse().toString();

            if(close.equals(open))
                return true;
            else
                return false;
        }
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for (int a0 = 0; a0 < t; a0++) {
            String expression = in.next();
            System.out.println( (isBalanced(expression)) ? "YES" : "NO" );
        }
    }
}

编辑:我在 new StringBuilder(close).reverse().toString(); 行之后使用 print 语句测试了代码

输入:

3
{[()]}
{[(])}
{{[[(())]]}

输出:

)]}
NO
])}
NO
))]]}}
NO

最佳答案

Java 中的

String 对象是不可变的,因此对其执行替换命令不会更改源 String,而是返回一个新的 String > 已修改。

让你的线条像这样

close.replaceAll("\\)", "\\(");

看起来像这样

close = close.replaceAll("\\)", "\\(");

使用修改后的String对象更新close变量的值。

<小时/>

同样,此处创建的String 不会被分配任何内容,并将被丢弃:

new StringBuilder(close).reverse().toString();

您需要将创建的String分配到某个地方,例如

close = new StringBuilder(close).reverse().toString();

关于java - 为什么转义字符不能用于替换所有括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46593159/

相关文章:

java - 构建助手-maven-插件目标 :regex-property how to access generated property

java - 如何从RecyclerView的所有TextView中获取文本

java - 我可以在 Java 中将对象字段标记为唯一吗

r - 从超过4位数字的字符串中删除

javascript - 关于 Javascript 正则表达式语法的问题

regex - 匹配单斜线时的 golang 正则表达式错误

java - 确保Java线程确实被挂起

latex - 有效地逃避LaTeX中的许多_

ruby-on-rails - 标题标签在 Rails/HAML 中被转义两次

python - Python/MySQL 组合的最佳转义字符策略是什么?