2017-08-06 76 views
0

任何人都可以幫助我用Java分離這個數學表達式125*1*4*4+82*1*10+2*59+2+4。我想從表達式中得到數字,我不知道如何在這裏使用split()方法。java中單獨的數學表達式

+0

它沒有任何東西o使用split()方法。你需要解析問題的工具(Chomsky 1956)。查找「遞歸下降表達式解析」或Dijkstra調車碼算法。 – EJP

回答

2

您可以使用拆分與此正則表達式[*+]

String[] numbers = "125*1*4*4+82*1*10+2*59+2+4".split("[*+]"); 

輸出

[125, 1, 4, 4, 82, 1, 10, 2, 59, 2, 4] 

如果數學表達式包含空格,你可以之前刪除它們,並使用分離等等您可以使用:

String[] numbers = "125*1*4*4+82*1*10+2*59+2+4".replaceAll("\\s+", "").split("[*+]"); 
//---------------------------------------------^----------------------^ 

注意您可以從eparvan添加其他的算術運算符像[*+-/]


另一種解決方案:

如果你不知道什麼是表達式可以包含你可以使用:

String[] numbers = "125*1*4*4+82*1*10+2*59+2+4".replaceAll("\\s+", "").split("[^0-9]"); 
//----------------------------------------------------------------------------^----^ 

編輯

如果我想要得到的 「+」 和 「*」? 輸入125*1*4*4+82*1*10+2*59+2+4輸出

String[] numbers = "125*1*4*4+82*1*10+2*59+2+4".replaceAll("\\s+", "").split("\\d+"); 

但我會prefert與模式去是更多的實踐再拆爲:***+**+*++

在這種情況下,你可以用\d+這樣的拆分例如你可以使用:

String str = "125*1/4*4+82*1*10+2/59-2+4"; 
String regex = "[^\\d]"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(str); 

while (matcher.find()) {             
    System.out.println(matcher.group()); 
} 
+1

最好使用這個'[^ 0-9]'正則表達式,以防萬一表達式包含其他算術運算,如分割,減法等。 – eparvan

+0

謝謝@eparvan檢查我的編輯我在那裏提到你的名字 –

+0

什麼如果我想獲得「+」和「*」? – Ajifos