java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1894字,纯文字阅读大概需要3分钟。
内容图文
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Arithmetic {
/**
* 利用Pattern计算字符串的结果(四则运算),当然也可以采用逆波兰式
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/*String str="2+3*(5*(12-6))";
Pattern pa=Pattern.compile("\\(([^\\(\\)]*)\\)");// \\(为左括号 \\)右括号,表示在括号内没有其他括号,然后用括号括起来是一个子组
Matcher ma=pa.matcher(str);
if (ma.find()) {//若匹配的存在
System.out.println(ma.group());//输出全部
System.out.println(ma.group(1));//输出第一个子组
}*/
System.out.println(calcu("5 +3 * 2*(2+2-3)-1"));
}
/**
* 计算可能含有括号的表达式
* @param s
* @return
*/
public static String calcu(String s) {
s=s.replaceAll(" +", "");//消除空格,空格可以是一个或多个,找到就替换
Pattern pa=Pattern.compile("\\(([^\\(\\)]*)\\)");// \\(为左括号 \\)右括号,表示在括号内没有其他括号,然后用括号括起来是一个子组e
while (true) {
Matcher ma=pa.matcher(s);
if (ma.find()==false)break;
//先计算括号内,然后消除括号
s=s.replace(ma.group(), calcuNoParen(ma.group(1)));
}
return calcuNoParen(s);
}
/**
* 计算没有括号的运算
* @param s2
* @return
*/
public static String calcuNoParen(String s2) {
if (s2.length()<1) return s2;
//先把乘法消除
Pattern pat=Pattern.compile("([0-9]+)\\*([0-9]+)");//0-9一个或多个,乘法
while (true) {
Matcher mc=pat.matcher(s2);
if (mc.find()==false) break;
int res=Integer.parseInt(mc.group(1))*Integer.parseInt(mc.group(2));
//计算出结果,并且消除括号,注意这里不能用replaceAll
s2=s2.replace(mc.group(), res+"");
}
//再从左到右消除所有加法和减法
pat=Pattern.compile("([0-9]+)([\\+\\-])([0-9]+)");//0-9一个或多个,加法或者减法
while (true) {
Matcher mc=pat.matcher(s2);
if (mc.find()==false) break;
int res=0;
switch (mc.group(2)) {
case "+":
res=Integer.parseInt(mc.group(1))+Integer.parseInt(mc.group(3));
break;
case "-":
res=Integer.parseInt(mc.group(1))-Integer.parseInt(mc.group(3));
break;
}
//计算出结果,并且消除括号,注意这里不能用replaceAll
s2=s2.replace(mc.group(), res+"");
}
return s2;
}
}
原文:http://blog.csdn.net/needkane/article/details/22714701
内容总结
以上是互联网集市为您收集整理的java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式全部内容,希望文章能够帮你解决java中正则表达式用Pattern计算字符串的结果(四则运算);分成有括号和没括号;当然也可以采用逆波兰式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。