我尝试交换字符串A * (B + C) / D中的圆括号,但是交换它们时,结果是A * \)B + C( / D而不是A * )B + C( / D。
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()方法在结果中添加了额外的斜杠。
// 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);发布于 2020-10-30 00:42:03
一种简单的交换方法可能是将"("交换为"_"之类的特殊字符,然后将")"交换为"(",最后将"_"交换为")",如下所示:
final String expression = "A * (B + C) / D";
final String result = expression
.replace("(", "_")
.replace(")", "(")
.replace("_", ")");如果不想使用特殊字符,可以像这样将表达式拆分为一个括号:
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);发布于 2020-10-30 00:48:42
您可能需要提供在正则表达式和Collectors.joining中使用的特殊值
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));
}则无需转义括号即可调用此方法:
String expression = "A * (B + C) / D";
String result = swapStrings(expression, "(",")");
System.out.println(result);输出:
A * )B + C( / Dhttps://stackoverflow.com/questions/64595093
复制相似问题