您的位置:首页 > 编程语言 > Java开发

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());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: