字符串处理:一个包括+-*/ 的字符串,如何将其转换分解为可计算的表达式
例如 ext1+ext2-ext3*ext4/ext5
其中ext1等表示的为变量
如何将其中的变量转换为实际变量计算.
请高手指点!小弟敬上.
例如 ext1+ext2-ext3*ext4/ext5
其中ext1等表示的为变量
如何将其中的变量转换为实际变量计算.
请高手指点!小弟敬上.
解决方案 »
- 这程序写不下去了,到底该如何理想的重绘窗口呢?
- 新手问题,关于父类子类的同名变量
- JAVA寫入文字檔
- 问Calendar.DATE是什么意思
- 一个修改数据库一个属性内容的问题
- 那里有Sun.Java.Studio.Entreprise.6.0企业版的下载呀???????????
- 非常简单的JAVA程序问题,大家快来帮忙呀!
- 为什么我的j2sdk-1_4_2_04-windows-i586-p.exe一直装不进去?
- 测试:初学者对于JDK的设置和在DOS下怎么使用bin中程序编译运行的一些问题,欢迎回答。也算是个小小的总结。
- 带数据库jar文件打包后不能运行怎么办?
- JTable 背景色 为透明
- 一个简单的线程例子。。看不懂
* 解析字符串,并计算字符串的值
* @param str 需要计算的字符串
* @return 字符串的计算结果
*/
public static double computeString(String str){
//创建Vector对象
Vector v = new Vector();
//解析字符串
int beginIndex = 0;
for(int i = 0;i < str.length();i++){
//遇到运算符
char c = str.charAt(i);
if((c == '+') || (c == '-') || (c == '*') || (c == '/')){
//截取字符串
String temp = str.substring(beginIndex,i);
//添加到Vector
v.add(temp);
//添加运算符
v.add("" + c);
//重新计算startIndex
beginIndex = i + 1;
}
}
//解析最后一个字符串
v.add(str.substring(beginIndex));
//计算
compute(v,"*");
compute(v,"/");
compute(v,"+");
compute(v,"-");
//最后计算结果
String result = (String)v.get(0);
//转换成double,并返回
return Double.parseDouble(result);
}
public static void compute(Vector v,String opr){
//计算
for(int i = 0;i < v.size();i++){
//获得元素
String temp = (String)v.get(i);
//判断是运算符
if(temp.equals(opr)){
//前一个元素
String pre = (String)v.get(i - 1);
//后一个元素
String next = (String)v.get(i + 1);
//计算
double result = 0;
//根据不同的运算符进行运算
if(opr.equals("*")){
result = Double.parseDouble(pre) * Double.parseDouble(next);
}else if(opr.equals("/")){
result = Double.parseDouble(pre) / Double.parseDouble(next);
}else if(opr.equals("+")){
result = Double.parseDouble(pre) + Double.parseDouble(next);
}else if(opr.equals("-")){
result = Double.parseDouble(pre) - Double.parseDouble(next);
}
//删除原来的数据
v.remove(i-1);
v.remove(i-1);
v.remove(i-1);
//插入到原来的位置
v.insertElementAt("" + result, i - 1);
//因为数据改变,需要继续计算当前内容
i--;
}
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestRegex1 {
public static void main(String[] args) {
String s = "123.11-456.56+789*333";
int count = 0;
int signCount = 0;
Pattern pNum = Pattern.compile("[0-9]{1}\\.[0-9]*[1,2,3,4,5,6,7,8,9]{1}|[1-9]{1}[0-9]*\\.[0-9]*[1,2,3,4,5,6,7,8,9]{1}|[1,2,3,4,5,6,7,8,9]{1}[0-9]*");
Matcher mNum = pNum.matcher(s);
Pattern pSign = Pattern.compile("\\+{1}|\\-{1}|\\*{1}|\\/{1}");
Matcher mSign = pSign.matcher(s);
mSign.reset();
mNum.reset();
while(mSign.find()) {
count++;
}
signCount = count;
while(mNum.find()) {
count++;
}
String[] str = new String[count];
int index = 0;
mSign.reset();
mNum.reset();
while(mNum.find()) {
str[index] = s.substring(mNum.start(), mNum.end());
index+=2;
}
index = 1;
while(mSign.find()) {
str[index] = s.substring(mSign.start(), mSign.end());
index+=2;
}
String[] temp;
while(signCount>0) {
for(int i=0;i<str.length;i++) {
if("*".equals(str[i])) {
str[i-1] = String.valueOf(Double.parseDouble(str[i-1])*Double.parseDouble(str[i+1]));
str[i] = "null";
str[i+1] = "null";
temp = new String[str.length-2];
int k = 0;
for(int j=0;j<str.length;j++) {
if("null".equals(str[j])) {
continue;
}
temp[k++] = str[j];
}
str = temp;
signCount--;
continue;
}
if("/".equals(str[i])) {
str[i-1] = String.valueOf(Double.parseDouble(str[i-1])/Double.parseDouble(str[i+1]));
str[i] = "null";
str[i+1] = "null";
temp = new String[str.length-2];
int k = 0;
for(int j=0;j<str.length;j++) {
if("null".equals(str[j])) {
continue;
}
temp[k++] = str[j];
}
str = temp;
signCount--;
continue;
}
if("+".equals(str[i])) {
str[i-1] = String.valueOf(Double.parseDouble(str[i-1])+Double.parseDouble(str[i+1]));
str[i] = "null";
str[i+1] = "null";
temp = new String[str.length-2];
int k = 0;
for(int j=0;j<str.length;j++) {
if("null".equals(str[j])) {
continue;
}
temp[k++] = str[j];
}
str = temp;
signCount--;
continue;
}
if("-".equals(str[i])) {
str[i-1] = String.valueOf(Double.parseDouble(str[i-1])-Double.parseDouble(str[i+1]));
str[i] = "null";
str[i+1] = "null";
temp = new String[str.length-2];
int k = 0;
for(int j=0;j<str.length;j++) {
if("null".equals(str[j])) {
continue;
}
temp[k++] = str[j];
}
str = temp;
signCount--;
continue;
}
}
}
System.out.println(str[0]);
}}