java字符串计算_java字符串运算简单实现

import java.util.ArrayList;

import java.util.List;

public class MathString {

public static void main(String[] args){

String press = "12*12.22-7*(23.45-(-2))+(12-34)";

press = press.replaceAll("[\\[\\{]", "(").replaceAll("[\\]\\}]", ")");

System.out.println(parseString(press));

}

public static String parseString(String press){

int lasc = press.lastIndexOf("(");

if(lasc==-1){

return String.valueOf(addString(press));

}

String firstKHString = press.substring(0,lasc);

String lastFKHString = press.substring(lasc+1);

//System.out.println("firstKHString---"+firstKHString);

//System.out.println("lastFKHString---"+lastFKHString);

int firc = lastFKHString.indexOf(")");

lastFKHString = press.substring(firc+lasc+2);

//System.out.println("lastFKHString---"+lastFKHString);

String currentPress = press.substring(lasc+1,firc+lasc+1);

//System.out.println(currentPress);

return parseString(firstKHString+addString(currentPress)+lastFKHString);

}

public static double addString(String press){

//System.out.println(press);

press = repAddString(press);

press = repString(press);

//System.out.println(press);

String[] numbers = press.split("[\\+]");

double number = 0;

List fhs = getFHAdd(press);

for(int i=0 ; i

String curNum = numbers[i];

//System.out.println(curNum);

if(curNum.equals("")){

curNum="0";

}

if(fhs.get(i).equals("+")){

number = number + mathString(curNum);

}else if(fhs.get(i).equals("-")){

number = number - mathString(curNum);

}

}

return number;

}

public static double mathString(String press){

/*int firstCH = press.indexOf("*");

int firstC = press.indexOf("/");

if(firstCH == -1 && firstC == -1){

return Double.parseDouble(press);

}

int firstindex = firstC < firstCH ? firstC : firstCH;

*/

press = repAddString(press);

String[] numbers = press.split("[\\*\\/]");

List fhs = getFH(press);

double result = 1;

for(int i=0 ; i

if(fhs.get(i).equals("*")){

result = result * Double.parseDouble(numbers[i]);

}else if(fhs.get(i).equals("/")){

if(Double.parseDouble(numbers[i])==0){

throw new ArithmeticException("表达式中被除数有空值!");

}

result = result / Double.parseDouble(numbers[i]);

}

}

return result;

}

public static String repAddString(String press){

return press.replace("++", "+").replace("--", "+").replace("+-", "-").replace("-+", "-");

}

public static String repString(String press){

StringBuffer sb = new StringBuffer();

char ch = 0;

for(char c:press.toCharArray()){

if(c=='-'&&'/'!=ch&&'*'!=ch){

sb.append("+");

}

ch = c;

sb.append(c);

}

return sb.toString();

}

public static List getFH(String press){

char[] chars = press.toCharArray();

List fhs = new ArrayList();

fhs.add("*");

for(char c : chars){

if(c=='*' || c=='/'){

fhs.add(String.valueOf(c));

}

}

return fhs;

}

public static List getFHAdd(String press){

char[] chars = press.toCharArray();

List fhs = new ArrayList();

fhs.add("+");

for(char c : chars){

if(c=='+'){

fhs.add(String.valueOf(c));

}

}

return fhs;

}

}

posted on 2011-07-01 10:09 墙头草 阅读(1216) 评论(0)  编辑  收藏

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值