2013-11-27 45 views
1

我的方法成功地使用二進制表達式樹並將其轉換爲前綴,後綴和中綴表示法。但是,由於最終字符串的準確性,它必須完全相等。Java String.split error

因此,在我返回輸出之前,我會運行一種方法來快速編輯輸出以消除任何缺陷。

(*(8 + 4)( - 7(/ 6 3)))===>(*(8 + 4)( - 7(/ 6 3)))

(( 8 4 +)(7(6 3 /) - ))=====>((8 4 +)(7(6 3 /) - )

什麼需要改變,是父母之間的間隔。我的目標是找到所有的字符串的情況下,刪除它們,並重新輸入字符串中沒有空格。

下劃線是多餘的空格 (* (+ 8 4)( - 7 _(/ 6 3)))

我的代碼被supposted是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

您需要了解[正則表達式(http://docs.oracle。com/javase/tutorial/essential/regex /),因爲'split()'沒有使用純字符串來分割 – vandale

回答

0

至於處理的主要方法,String是不可改變的。要獲得replaceFirst方法的更改,您需要重新分配out。你也需要跳過元字符。

out=out.replaceFirst("\\)\\s*\\(", "X"); 
+0

我已經完成了你所要求的。 out = out.replaceFirst(「)(」,「X」);但錯誤沒有改變。 – jakeinmn

0

使用s.replaceAll("(?<=\\))\\s(?=\\()","")把空格去掉

錯誤是因爲該字符串是一個正則表達式字符串,parenteses必須用雙反斜線("\\("),否則有特殊含義進行轉義。

編輯:使用s.replaceAll("(?<=\\))\\s+(?=\\()","")多個空格

+0

這個正則表達式不會刪除多個(連續)空格 – cosjav

+0

@cosjav我認爲OP的代碼會讓每個節點在其子節點之間放置一個空間。雖然你的觀點已被採納 – vandale

0

您可以使用此正則表達式刪除圓括號括起來的空間:

out=out.replaceAll("\\s*([()])\\s*", "$1");

0

試試這個。它取代了字符串。

out.replaceFirst("\\) \\(", "X"); 
1

正如在其他的答案/評論提到,String.split採取的模式字符串(正則表達式),這就是爲什麼你得到無與倫比的括號錯誤。您可以使用Pattern.quote方法來獲取模式字符串將匹配您的字符串字面量:

yourString.split(java.util.regex.Pattern.quote(") ("));