gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:54:16 26 4
gpt4 key购买 nike

我正在尝试将所有括号替换为相对的括号,因为我在解决 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com