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