今天给各位分享javastring表达式计算的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、Java 字符串算术表达式求值2、Java中的字符串转为计算表达式3、Java怎么实现输入一个string表达式然后输出计算的结果
Java 字符串算术表达式求值
Java 字符串算术表达式求值:
import java.util.ArrayList;
import java.util.Stack;
/**
*
* @author yhh
*
*/
public class Calculate {
/**
* 将字符串转化成List
* @param str
* @return
*/
public ArrayListString getStringList(String str){
ArrayListString result = new ArrayListString();
String num = “”;
for (int i = 0; i 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 ArrayListString getPostOrder(ArrayListString inOrderList){
ArrayListString result = new ArrayListString();
StackString stack = new StackString();
for (int i = 0; i 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(ArrayListString postOrder){
Stack stack = new Stack();
for (int i = 0; i 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);
}
}
Java中的字符串转为计算表达式
这需要写很长一段代码。
1、判断表达式中有没有括号,如果有括号,转第二步。没有括号转第三步。
2、把括号内的内容提取出来,作为一个新的表达式。转第三步
3、判断表达式中有没有乘号和除号,有转第四步。没有转第六步。
4、把乘除号和乘除号前后的数字提取出来,得到新的表达式,转第五步。
5、提取数字和符号,判断表达式是乘号还是除号,然后计算结果。返回。
6、表达式没有乘除号,有加减号。转第七步。
7、提取包含加减的表达式中的符号和数据,计算结果,返回。
就是这个道理,这里只是描述了带括号和加减乘除的表达式,如果有更多的运算符,则根据运算符优先级处理。
Java怎么实现输入一个string表达式然后输出计算的结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
//算式
public static void test32() throws Exception{
System.out.println(“请输入算式:”);
Scanner scanner = new Scanner(System.in);
String str = scanner.next(“-?\\d*\\.?\\d+[+-/*]-?\\d*\\.?\\d+”);
String[] xyStr = str.split(“[+-/*]”);
float x = Float.parseFloat(xyStr[0]);
float y = Float.parseFloat(xyStr[1]);
float r = 0;
char opt = ‘+’;
if(str.contains(“+”)){
opt = ‘+’;
r = x + y;
}else if(str.contains(“-“)){
opt = ‘-‘;
r = x – y;
}else if(str.contains(“*”)){
opt = ‘*’;
r = x * y;
}else if(str.contains(“/”)){
opt = ‘/’;
r = x / y;
}
System.out.println(x+””+opt+y+”=”+r);
}
关于javastring表达式计算和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。