Java String.split错误

时间:2013-11-27 04:36:44

标签: java string split

我的方法成功获取二进制表达式树并将其转换为前缀,后缀和中缀表示法。但是,由于最终字符串的准确性,它必须完全相同。

因此,在我返回输出之前,我将运行一种方法来快速编辑该输出以消除任何缺陷。

  

(*(+ 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()?

的强大功能

编辑:谢谢大家,但我意识到我必须自己处理主要方法

5 个答案:

答案 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");