經過一段時間處理此問題後,我無法準確計算出我需要的Regex語法。使用Java拆分來評估數學表達式
在我學習的一門Java課程中,我們接受了構建一個能夠表達字符串(使用或不使用圓括號)並正確評估它的計算器的任務。
表達的解析背後的概念是,你有一個字符串...
5+16/20-56+7-20*16/9
而且要通過 '分裂' 拿到兩分的ArrayLists:
{5,16,20,56,7,20,16,9}
{+,/,-,+,-,*,/}
然後,您可以按照操作優先級逐個執行操作,從ArrayList清空操作,直到您的數組數組ha一個要素:最終結果。
不幸的是,我沒有Regex
的經驗,也不能讓任何意義我正在閱讀的教程和示例。
我不知道如何根據"[*-/+]"
拆分,我不知道如何選擇整個號碼拆分而不是單純的數字。由於這些錯誤,我無法讓我的代碼編譯。代碼的一個工作片斷我卻得到:
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Tester
{
public static void main(String[] args)
{
String expression = "3+5+6-10*20/150-14+76%2";
// String[] operands = expression.split("");
String[] operators = expression.split("[0-9]");
// System.out.println(operands);
System.out.println(operators);
}
}
結果
[Ljava.lang.String;@308ab721
而且我不知道從哪裏是從何而來。
任何人都可以幫我弄清楚我做錯了什麼嗎?或者指向一個非常好的初學者課 on Regex?
我感謝你的幫助,每個人。
第一種模式中的反斜槓都不是必需的,儘管它們是無害的。 – ajb
沒關係,修改它。但它是一個很好的做法,在正則表達式中包含轉義字符(for begginner)。因爲在某些情況下,這是必須的。例如'replaceAll()' – Baby
對不起,您*在*之前需要*,以便它不會將其視爲範圍。我沒有一個美好的一天。對錯誤信息抱歉。 – ajb