導航:首頁 > 編程語言 > java字元串表達式計算

java字元串表達式計算

發布時間:2024-07-08 00:46:41

java解析字元串 算術表達式求值

Java 有一個jar包 叫groovy

groovy可以實現動態執行 String格式的算數表達式

publicstaticvoidmain(String[]args)throwsException{
Stringstr1="1+2*3";//表達式1固定表達式
GroovyShellgroovyShell=newGroovyShell();
Objectvalue=groovyShell.evaluate(str1);
System.out.println(value);

Stringstr2="A+B*C";//表達式2動態表達式
Bindingbinding=newBinding();
binding.setVariable("A",1);//表達式中所有的A替換為1
binding.setVariable("B",2);//表達式中所有的B替換為2
binding.setVariable("C",3);//表達式中所有的C替換為3
GroovyShellgroovyShell2=newGroovyShell(binding);
Objectvalue2=groovyShell2.evaluate(str2);//str2實際表達式為1+2*3
System.out.println(value2);
}

② java中怎麼將字元串(帶運算符號加減乘除)轉換成代數算式運算

這需要寫很長一段代碼。
1、判斷表達式中有沒有括弧,如果有括弧,轉第二步。沒有括弧轉第三步。
2、把括弧內的內容提取出來,作為一個新的表達式。轉第三步
3、判斷表達式中有沒有乘號和除號,有轉第四步。沒有轉第六步。
4、把乘除號和乘除號前後的數字提取出來,得到新的表達式,轉第五步。
5、提取數字和符號,判斷表達式是乘號還是除號,然後計算結果。返回。
6、表達式沒有乘除號,有加減號。轉第七步。
7、提取包含加減的表達式中的符號和數據,計算結果,返回。

就是這個道理,這里只是描述了帶括弧和加減乘除的表達式,如果有更多的運算符,則根據運算符優先順序處理。

③ java表達式是什麼

Java是面向表達式的語言,Java中一個簡單表達式可以是下面任意一種:● 常量:7、false。● 單引號括起來的字元字面常量:'A'、'3'。● 雙引號括起來的字元串字面常量:"foo"、"Java"。● 任何正確聲明的變數名:myString、x。● 任何用Java二元運算符(本章稍後將詳細討論)連接起來的兩個上述類型的表達式:x+2。● 任何用Java一元運算符(本章稍後將詳細討論)修飾的單個上述類型的表達式:i++。● 任何用小括弧括起來的上述類型的表達式:(x+2)。以及另外一些與本書後面將要學到的對象有關的表達式類型。無論多麼復雜的表達式都可以由不同類型的簡單表達式和括弧嵌套組合而成,例如:((((4/x) + y) * 7) + z)。2.9.1 算術運算符 Java語言提供了許多基本的算術運算符,如表2-1所示。表2-1 Java算術運算符運算符描 述+加法-減法*乘法/除法%求余(%左邊的操作數除以右邊的
操作數所得到的余數,例如10%3=1)+和-運算符也可作為一元運算符用於表示正負數:-3.7、+42。除了簡單賦值運算符=,還有許多特定的復合賦值運算符,這些運算符將變數賦值和算術操作合並在一起,如表2-2所示。表2-2 Java復合賦值運算符運算符描 述+=a+=b等價於a=a+b-=a-=b等價於a=a-b*=a*=b等價於a=a*b/=a/=b等價於a=a/b%=a%=b等價於a=a%b最後要介紹的兩個算術運算符是一元遞增運算符(++)和一元遞減運算符(--),用於將整數變數的值加1或減1,或者將浮點數變數的值加1.0或減1.0。稱它們為一元運算符是因為它們用於單個變數,而前面討論的二元運算符則連接兩個表達式的值。一元遞增運算符和一元遞減運算符也可用於將字元變數在Unicode序列中向前或向後移動一個字元位置。例如,在下面的代碼片段中,字元變數c的值從'e'遞增為'f':遞增和遞減運算符可以以前綴或者後綴方式使用。如果運算符放在操作數之前(前綴模式),變數的遞增或遞減操作將在更新後的變數值被用於任何由它構成的賦值操作之前執行。例如,考慮下面的使用前綴遞增運算符的代碼片段,假設a和b在程序前面已經聲明為int變數:上述代碼執行後,變數a的值是2,變數b的值也是2。這是因為在第二行中變數a的遞增(從1到2)發生在它的值賦給b之前。因此這行代碼在邏輯上等價於下面兩行代碼: 另一方面,如果運算符放在操作數之後(後綴模式),遞增或遞減操作發生在原來的變數值被用於任何由它構成的賦值操作之後。看一下以後綴方式使用遞增運算符的相同代碼片段:上述代碼執行後,變數b的值是1,而變數a的值是2。這是因為在第二行中變數a的遞增(從1到2)發生在它的值賦給b之後。因此這行代碼在邏輯上等價於下面兩行代碼:下面是一個稍微復雜一點例子,請閱讀附加的注釋以確保你能夠明白x最終是如何被賦值為10的:稍後將會看到,遞增和遞減運算符通常和循環一起使用。2.9.2 關系和邏輯運算符邏輯表達式以指定的方式比較兩個(簡單或者復雜)表達式exp1和exp2,決議出一個boolean值true或者false。 Java提供了表2-3所示的關系運算符來創建邏輯表達式。表2-3 Java關系運算符運算符描 述exp1==exp2如果exp1等於exp2,值為true(注意使用雙等號測試相等性)exp1>exp2如果exp1大於exp2,值為trueexp1>=exp2如果exp1大於等於exp2,值為trueexp1<exp2如果exp1小於exp2,值為trueexp1<=exp2如果exp1小於等於exp2,值為trueexp1!=exp2如果exp1不等於exp2,值為true!exp如果exp為false值為true,如果exp為true值為false除了關系運算符,Java還提供了用於組合/修飾邏輯表達式的邏輯運算符。表2-4列出了最常用的邏輯運算符。表2-4 Java邏輯運算符運算符描 述exp1&&exp2邏輯「與」,僅當exp1和exp2都為true時復合表達式值為trueexp1||exp2邏輯「或」,exp1或exp2值為true時復合表達式值為true!exp邏輯「非」,將邏輯表達式的值從true切換到false,反之亦然下面這個例子用邏輯「與」運算符來編程實現邏輯表達式「如果x大於2.0且y不等於4.0」:邏輯表達式常用於流程式控制制結構,本章稍後將進行討論。2.9.3 表達式求值和運算符優先順序如同本章前面提到的那樣,任何復雜的表達式都可以用分層嵌套的小括弧構成,例如(((8 * (y + z)) + y) x)。編譯器通常按照從內到外,從左到右的順序對這樣的表達式求值。假設x、y、z按照下面的方式聲明並初始化:下面的賦值語句右邊的表達式:將像下面這樣逐步求值:沒有小括弧時,根據運算符用於表達式求值的順序,某些運算符具有高於其他運算符的優先順序。例如,乘除法先於加減法執行。通過使用小括弧可以強制改變運算符的優先順序,括弧內的運算符比括弧外的先執行。考慮下面的代碼片段:代碼的第一行沒有使用括弧,乘法操作比加法操作先執行,因此整個表達式的值為2+12=14,就像我們將表達式明確地寫成2+(3*4)一樣,當然這樣做沒有必要。 在代碼的第二行,括弧被明確地放在操作2+3兩邊,因此加法操作將首先執行,然後求和結果乘以4作為整個表達式的值,即5*4=20。回到前面的例子注意到>和!=運算符優先順序高於&&運算符,因此可以去掉嵌套的括弧而變成下面這樣:然而,額外的括弧並不會對代碼造成傷害,事實上它可以使表達式的目的更加清楚。2.9.4 表達式類型表達式類型是表達式最終求值結果的Java類型。例如給定下面的代碼片段:表達式(x > 2.0) && (y != 4.0)求值結果為true,因此表達式(x > 2.0) && (y != 4.0)稱為boolean型表達式。在下面的代碼片段中:表達式((8 * (y + z)) + y) * x求值結果為42,因此表達式((8 * (y + z)) + y) * x稱為整型表達式。

④ Java計算字元串中的數學表達式的值演算法怎麼寫

代碼網上很多,只說說演算法吧
12+8/4-5+(3-4)

把這樣的表達式拆成:(操作數)(操作符) 、
12+
8/
4-
5+(
3-
4)
(術語叫做逆波蘭式)
默認的計算順序是從左往右,記為left。另設從右往左,記為right
設計Element類,具有 操作數 operant, 操作符operator, 操作順序 order三個屬性
用兩個先進後出的棧結構Stack<Element> a,b;
一開始所有的Element都在a中,逐個彈出計算合並值,
當遇到乘、除、括弧時計算順序改變成right,把當前結果放到b中暫存。
直到再次遇到加、減、)右括弧時,意味計算順序復位成left,先把b中的暫存結果全部合並後,再繼續算a中的剩餘數據
最後合並成一個結果值。

⑤ java鎬庢牱鎶婂瓧絎︿覆琛ㄨ揪寮忚$畻鍑烘潵

鍙浠ヤ嬌鐢 commons-jexl3 jar鍖


紺轟緥:

publicstaticvoidmain(String[]args){
StringexpressionString="1+2+3";

JexlEnginejexlEngine=newJexlBuilder().create();
JexlExpressionjexlExpression=jexlEngine.createExpression(expressionString);
Objectevaluate=jexlExpression.evaluate(null);
System.out.println(evaluate);
}

緇撴灉: 6


紺轟緥2:


鏉ヤ釜澶嶆潅鐐圭殑

publicstaticvoidmain(String[]args){
//StringexpressionString="1+2+3";

StringexpressionString="100*10-(200+300)";

JexlEnginejexlEngine=newJexlBuilder().create();
JexlExpressionjexlExpression=jexlEngine.createExpression(expressionString);
Objectevaluate=jexlExpression.evaluate(null);
System.out.println(evaluate);
}



緇撴灉: 500

閱讀全文

與java字元串表達式計算相關的資料

熱點內容
馬思純參加密室大逃脫 瀏覽:319
文件夾冬季澆築溫度 瀏覽:710
京東有返點的aPp叫什麼 瀏覽:601
如何查看u點家庭伺服器是幾兆 瀏覽:260
python應用介面怎麼接 瀏覽:65
腐蝕怎麼進不去伺服器啊 瀏覽:357
linuxcpiogz 瀏覽:628
安卓中的布局是什麼文件 瀏覽:395
dex反編譯部分代碼無法查看 瀏覽:461
linuxandroid編譯 瀏覽:601
程序員電視劇20集 瀏覽:906
怎麼擴建文件夾 瀏覽:158
波普諾社會學pdf 瀏覽:96
通風網路理論與演算法 瀏覽:737
win8如何關閉伺服器 瀏覽:381
醫護比例演算法 瀏覽:806
伺服器s是什麼意思 瀏覽:31
華為手機怎麼設置不讓app訪問照片 瀏覽:694
編程貓微信小程序 瀏覽:393
app內部購如何購買 瀏覽:334