2016-11-22 54 views
1

基本上我想一個字符串分割成一個數組的空間和運營商界定,但保留了運營商,同時消除了空間將字符串分割保持一定的分隔符,但除去另一個

前。 3 52 9+- 2 3 * /

[3][52][9][+][-][2][3][*][/]

+0

得到downvoted後,我意識到,你可能有運營商任意數量的一起。正則表達式可能不是這樣做的最佳工具。 –

+0

是的,我會的。你建議我做什麼? – orangespire

+0

我在下面恢復了我的答案。它沒有給你準確的期望輸出,但它很接近。 –

回答

2

要在拆分是消耗分隔符它們是空白的,並沒有消耗分隔符它們是數學符號邏輯。爲了達到這個目的,我們可以使用向前的符號進行分割,並使用普通的\\s以空格分割並將其從結果中刪除。

String input = "3 52 9+- 2 3 * /"; 
input = input.replaceAll("([\\+\\-*/])(.)", " $1$2") 
      .replaceAll("\\s+", " "); 

String[] parts = input.split("(?<=[\+\-*/])|\\s") 

System.out.println(Arrays.toString(parts)); 

輸出:

[3, 52, 9, +, -, 2, 3, *, /] 
-1

試試這個正則表達式:

([\-]?[^\s\+\-\*\/]+|[\+\-\*\/]) 

它將選擇:

[\-]?符號或無符號

[^\s\+\-\*\/]人物既不是空格,也不[+ - * /]

or[\+\-\*\/] [+ - * /]

只要符合你的情況。

0
import java.util.ArrayList; 
import java.util.List; 

public class Test { 

    public static void main(String[] args) { 
     String input = "3 52 9+- 2 3 * /"; 
     input = input.replaceAll("([\\+\\-*/])", " $1 ").replaceAll("\\s+", " "); 
     String[] parts = input.split("(?<=[+\\-*/ ])"); 
     List<String> finalList = new ArrayList<String>(); 
     for(String part : parts) { 
      if(part.trim().length() > 0) { 
       finalList.add(part); 
      } 
     } 
     System.out.println(finalList); 
    } 
} 

輸出

[3 , 52 , 9 , +, -, 2 , 3 , *, /] 
+0

這看起來很像我的回答,而且看起來你的號碼在最後還有額外的空格。 –

+0

是的,我已經upvote你的答案,你的代碼有錯誤,我解決它並回答它 –

相關問題