簡體   English   中英

Java String.split錯誤

[英]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)))

我的代碼被假定為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()的功能?

編輯:謝謝大家,但我意識到我只需要處理主要方法本身

如其他答案/評論中所述, String.split接受模式字符串(正則表達式),這就是為什么您會遇到無與倫比的括號錯誤的原因。 您可以使用Pattern.quote方法來獲取與字符串文字匹配的模式字符串:

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

作為, String是不可變的。 要更改replaceFirst方法,您需要使用out重新分配。 另外,您需要跳過元字符。

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

使用s.replaceAll("(?<=\\\\))\\\\s(?=\\\\()","")刪除空格

該錯誤是因為該字符串是一個正則表達式字符串,並且括號必須用雙反斜杠( "\\\\(" )進行轉義,否則它們具有特殊含義。

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

您可以使用此正則表達式刪除括號內的空格:

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

嘗試這個。 它替換字符串。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM