java中,如何将字符串里的数字进行运算!

Python020

java中,如何将字符串里的数字进行运算!,第1张

字符串里包含数字,首先要使用正则表达式将其中的数字提取出来,正则写法为: "^[0-9]*[1-9][0-9]*$"; 然后用Integer函数将其转换为数字类型,就可以进行您所需要的运算了。Integer是其包装类,注意是一个类,用法例子:int num2=Integer.parseInt("12")Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

Java 字符串算术表达式求值:

import java.util.ArrayList

import java.util.Stack

/**

*

* @author yhh

*

*/

public class Calculate {

/**

* 将字符串转化成List

* @param str

* @return

*/

public ArrayList<String>getStringList(String str){

ArrayList<String>result = new ArrayList<String>()

String num = ""

for (int i = 0i <str.length()i++) {

if(Character.isDigit(str.charAt(i))){

num = num + str.charAt(i)

}else{

if(num != ""){

result.add(num)

}

result.add(str.charAt(i) + "")

num = ""

}

}

if(num != ""){

result.add(num)

}

return result

}

/**

* 将中缀表达式转化为后缀表达式

* @param inOrderList

* @return

*/

public ArrayList<String>getPostOrder(ArrayList<String>inOrderList){

ArrayList<String>result = new ArrayList<String>()

Stack<String>stack = new Stack<String>()

for (int i = 0i <inOrderList.size()i++) {

if(Character.isDigit(inOrderList.get(i).charAt(0))){

result.add(inOrderList.get(i))

}else{

switch (inOrderList.get(i).charAt(0)) {

case '(':

stack.push(inOrderList.get(i))

break

case ')':

while (!stack.peek().equals("(")) {

result.add(stack.pop())

}

stack.pop()

break

default:

while (!stack.isEmpty() &&compare(stack.peek(), inOrderList.get(i))){

result.add(stack.pop())

}

stack.push(inOrderList.get(i))

break

}

}

}

while(!stack.isEmpty()){

result.add(stack.pop())

}

return result

}

/**

* 计算后缀表达式

* @param postOrder

* @return

*/

public Integer calculate(ArrayList<String>postOrder){

Stack stack = new Stack()

for (int i = 0i <postOrder.size()i++) {

if(Character.isDigit(postOrder.get(i).charAt(0))){

stack.push(Integer.parseInt(postOrder.get(i)))

}else{

Integer back = (Integer)stack.pop()

Integer front = (Integer)stack.pop()

Integer res = 0

switch (postOrder.get(i).charAt(0)) {

case '+':

res = front + back

break

case '-':

res = front - back

break

case '*':

res = front * back

break

case '/':

res = front / back

break

}

stack.push(res)

}

}

return (Integer)stack.pop()

}

/**

* 比较运算符等级

* @param peek

* @param cur

* @return

*/

public static boolean compare(String peek, String cur){

if("*".equals(peek) &&("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){

return true

}else if("/".equals(peek) &&("/".equals(cur) || "*".equals(cur) ||"+".equals(cur) ||"-".equals(cur))){

return true

}else if("+".equals(peek) &&("+".equals(cur) || "-".equals(cur))){

return true

}else if("-".equals(peek) &&("+".equals(cur) || "-".equals(cur))){

return true

}

return false

}

public static void main(String[] args) {

Calculate calculate = new Calculate()

String s = "12+(23*3-56+7)*(2+90)/2"

ArrayList result = calculate.getStringList(s) //String转换为List

result = calculate.getPostOrder(result) //中缀变后缀

int i = calculate.calculate(result) //计算

System.out.println(i)

}

}