我的方法成功获取二进制表达式树并将其转换为前缀,后缀和中缀表示法。但是,由于最终字符串的准确性,它必须完全相同。
因此,在我返回输出之前,我将运行一种方法来快速编辑该输出以消除任何缺陷。
(*(+ 8 4)( - 7(/ 6 3)))===> (*(+ 8 4)( - 7(/ 6 3)))
((8 4 +)(7(6 3 /) - ))=====> ((8 4 +)(7(6 3 /) - ))
需要改变的是,parens之间的间距。我的目标是查找字符串的所有情况,删除它们,并在没有空格的字符串中重新输入。
下划线是额外的空格 (* (+ 8 4)( - 7 _(/ 6 3)))
我的代码被假定为String.split(") (");
,但错误标志为...... unmatched closing ')')(???
public String antibullshiter(String out) {
out = out.replaceFirst(") (", "X"); //edited
String[] parts = out.split("X");
String part1 = parts[0];
String part2 = parts[1];
part1 = part1 + ")";
part2 = part2 + "(";
out = part1 + part2;
return out;}
如何利用String.split()?
的强大功能编辑:谢谢大家,但我意识到我必须自己处理主要方法
答案 0 :(得分:1)
正如其他答案/评论中所提到的,String.split
采用模式字符串(正则表达式),这就是为什么你得到了不匹配的括号错误。您可以使用Pattern.quote
方法获取与您的字符串文字匹配的模式字符串:
yourString.split(java.util.regex.Pattern.quote(") ("));
答案 1 :(得分:0)
因为,String
是不可变的。要获得replaceFirst
方法的更改,您需要使用out
重新分配。您还需要跳过元字符。
out=out.replaceFirst("\\)\\s*\\(", "X");
答案 2 :(得分:0)
使用s.replaceAll("(?<=\\))\\s(?=\\()","")
删除空格
错误是因为字符串是正则表达式字符串,并且必须使用双反斜杠("\\("
)转义parenteses,否则它们具有特殊含义。
编辑:将s.replaceAll("(?<=\\))\\s+(?=\\()","")
用于多个空格
答案 3 :(得分:0)
您可以使用此正则表达式删除括号周围的空格:
out=out.replaceAll("\\s*([()])\\s*", "$1");
答案 4 :(得分:0)
试试这个。它取代了字符串。
out.replaceFirst("\\) \\(", "X");