java中四则运算计算器
2016-09-23 20:09
369 查看
package test;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test4 {
public static void main(String[] args)
{
// TODO Auto-generated method
stub
String src = "(3 + (5 - 2) * 10
/ 2 * 3 + 15) * (8 - 4)";
System.out.println(calculation(src));
}
public static String calculation(String
src){
StringBuilder builder = new
StringBuilder();
if(src.contains("(")){
System.out.println("123");
Pattern p =
Pattern.compile("\\(([^()]+)\\)");
Matcher
matcher = p.matcher(src);
int lastEnd =
0;
while(matcher.find()){
builder.append(src.substring(lastEnd,
matcher.start()));
builder.append(calculation(matcher.group(1)));
lastEnd
= matcher.end();
}
builder.append(src.substring(lastEnd));
}else{
Pattern
pattern =
Pattern.compile("([\\d.]+)\\s*([*/])\\s*([\\d.]+)");
builder.append(src);
Matcher
matcher = pattern.matcher(builder.toString());
while(matcher.find()){
float
f1 = Float.parseFloat(matcher.group(1));
float
f2 = Float.parseFloat(matcher.group(3));
float
result = 0;
switch(matcher.group(2)){
case
"*":
result
= f1 * f2;
break;
case
"/":
result
= f1 / f2;
break;
}
builder.replace(matcher.start(),
matcher.end(), String.valueOf(result));
matcher.reset(builder.toString());
}
pattern =
Pattern.compile("([\\d.]+)\\s*([+-])\\s*([\\d.]+)");
matcher =
pattern.matcher(builder.toString());
while(matcher.find()){
float
f1 = Float.parseFloat(matcher.group(1));
float
f2 = Float.parseFloat(matcher.group(3));
float
result = 0;
switch(matcher.group(2)){
case
"+":
result
= f1 + f2;
break;
case
"-":
result
= f1 - f2;
break;
}
builder.replace(matcher.start(),
matcher.end(), String.valueOf(result));
matcher.reset(builder.toString());
}
return
builder.toString();
}
System.out.println(builder);
return
calculation(builder.toString());
}
public static String cal(String src) {
StringBuilder builder = new StringBuilder();
if (src.contains("(")) {
Pattern pattern = Pattern.compile("\\(([^()]+)\\)");
Matcher matcher = pattern.matcher(src);
int lastEnd = 0;
while (matcher.find()) {
builder.append(src.substring(lastEnd, matcher.start()));
builder.append(cal(matcher.group(1)));
lastEnd = matcher.end();
}
builder.append(src.substring(lastEnd));
} else {
Pattern pattern =
Pattern.compile("([\\d.]+)\\s*([*/])\\s*([\\d.]+)");
builder.append(src);
Matcher matcher = pattern.matcher(builder.toString());
while (matcher.find()){
float f1 = Float.parseFloat(matcher.group(1));
float f2 = Float.parseFloat(matcher.group(3));
float result = 0;
switch (matcher.group(2)){
case "*":
result = f1 * f2;
break;
case "/":
result = f1 / f2;
break;
}
builder.replace(matcher.start(), matcher.end(),
String.valueOf(result));
matcher.reset(builder.toString());
}
pattern =
Pattern.compile("([\\d.]+)\\s*([+-])\\s*([\\d.]+)");
matcher = pattern.matcher(builder.toString());
while (matcher.find()){
float f1 = Float.parseFloat(matcher.group(1));
float f2 = Float.parseFloat(matcher.group(3));
float result = 0;
switch (matcher.group(2)){
case "+":
result = f1 + f2;
break;
case "-":
result = f1 - f2;
break;
}
builder.replace(matcher.start(), matcher.end(),
String.valueOf(result));
matcher.reset(builder.toString());
}
return builder.toString();
}
System.out.println(builder);
return cal(builder.toString());
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test4 {
public static void main(String[] args)
{
// TODO Auto-generated method
stub
String src = "(3 + (5 - 2) * 10
/ 2 * 3 + 15) * (8 - 4)";
System.out.println(calculation(src));
}
public static String calculation(String
src){
StringBuilder builder = new
StringBuilder();
if(src.contains("(")){
System.out.println("123");
Pattern p =
Pattern.compile("\\(([^()]+)\\)");
Matcher
matcher = p.matcher(src);
int lastEnd =
0;
while(matcher.find()){
builder.append(src.substring(lastEnd,
matcher.start()));
builder.append(calculation(matcher.group(1)));
lastEnd
= matcher.end();
}
builder.append(src.substring(lastEnd));
}else{
Pattern
pattern =
Pattern.compile("([\\d.]+)\\s*([*/])\\s*([\\d.]+)");
builder.append(src);
Matcher
matcher = pattern.matcher(builder.toString());
while(matcher.find()){
float
f1 = Float.parseFloat(matcher.group(1));
float
f2 = Float.parseFloat(matcher.group(3));
float
result = 0;
switch(matcher.group(2)){
case
"*":
result
= f1 * f2;
break;
case
"/":
result
= f1 / f2;
break;
}
builder.replace(matcher.start(),
matcher.end(), String.valueOf(result));
matcher.reset(builder.toString());
}
pattern =
Pattern.compile("([\\d.]+)\\s*([+-])\\s*([\\d.]+)");
matcher =
pattern.matcher(builder.toString());
while(matcher.find()){
float
f1 = Float.parseFloat(matcher.group(1));
float
f2 = Float.parseFloat(matcher.group(3));
float
result = 0;
switch(matcher.group(2)){
case
"+":
result
= f1 + f2;
break;
case
"-":
result
= f1 - f2;
break;
}
builder.replace(matcher.start(),
matcher.end(), String.valueOf(result));
matcher.reset(builder.toString());
}
return
builder.toString();
}
System.out.println(builder);
return
calculation(builder.toString());
}
public static String cal(String src) {
StringBuilder builder = new StringBuilder();
if (src.contains("(")) {
Pattern pattern = Pattern.compile("\\(([^()]+)\\)");
Matcher matcher = pattern.matcher(src);
int lastEnd = 0;
while (matcher.find()) {
builder.append(src.substring(lastEnd, matcher.start()));
builder.append(cal(matcher.group(1)));
lastEnd = matcher.end();
}
builder.append(src.substring(lastEnd));
} else {
Pattern pattern =
Pattern.compile("([\\d.]+)\\s*([*/])\\s*([\\d.]+)");
builder.append(src);
Matcher matcher = pattern.matcher(builder.toString());
while (matcher.find()){
float f1 = Float.parseFloat(matcher.group(1));
float f2 = Float.parseFloat(matcher.group(3));
float result = 0;
switch (matcher.group(2)){
case "*":
result = f1 * f2;
break;
case "/":
result = f1 / f2;
break;
}
builder.replace(matcher.start(), matcher.end(),
String.valueOf(result));
matcher.reset(builder.toString());
}
pattern =
Pattern.compile("([\\d.]+)\\s*([+-])\\s*([\\d.]+)");
matcher = pattern.matcher(builder.toString());
while (matcher.find()){
float f1 = Float.parseFloat(matcher.group(1));
float f2 = Float.parseFloat(matcher.group(3));
float result = 0;
switch (matcher.group(2)){
case "+":
result = f1 + f2;
break;
case "-":
result = f1 - f2;
break;
}
builder.replace(matcher.start(), matcher.end(),
String.valueOf(result));
matcher.reset(builder.toString());
}
return builder.toString();
}
System.out.println(builder);
return cal(builder.toString());
}
}
相关文章推荐
- Java实现四则运算计算器(支持括号,小数,负数)
- 数据结构(四)java模拟计算器四则运算算法
- java语言的科学与艺术-编程练习---简单的四则运算计算器
- Android用java数组实现计算器的四则运算
- Java实现四则运算计算器
- 利用java的swing控件实现四则混合运算计算器
- java:四则混合运算,模拟微软的计算器
- java小练习(实现分数的四则运算)
- java 四则运算(没有文章的博客都有点击率,太对不起观众了囧)
- java浮点数运算在计算器上的应用
- Java实现四则运算表达式计算
- 一个逆波兰表达式实现的四则混合运算计算器
- 带括号的四则混合运算的算符优先算法java实现
- Java实现四则运算的解析
- Java 四则运算表达式求解
- Redy语法分析--一个简单的四则运算计算器
- 【数据结构—我来动手】支持四则混合运算的计算器
- 一个简单的四则运算计算器
- 有理数的四则运算 C、java
- java求复数四则运算,习题5.23(最终版)