首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

怎么分离变量和运算符

2011-12-17 
如何分离变量和运算符?类似下面的四则运算式子String formula (1112 + 2134)*4265-436436;如何将1112,

如何分离变量和运算符?
类似下面的四则运算式子
String formula = "(1112 + 2134)*4265-436436";
如何将1112, 2134,4265, 436436从中分离出来?
请高手指点!

[解决办法]
最后输出的就是分离后的数据

import java.util.*;;
public class Test {
public static void main(String[] args) {
String formula = "(1112 + 2134)*4265-436436";
ArrayList<String> str=new ArrayList<String>();
String string="";
int h=0;
for(int i=0;i<formula.length();i++)
{
if(formula.charAt(i)<='9'&&formula.charAt(i)>='0')
{
string=string+formula.charAt(i);
h=1;
}
else
{
if(h==1)
{
str.add(string);
}
string="";
h++;
}
}
if(h==1)
{
str.add(string);
}

for(int i=0;i<str.size();i++)
System.out.println(str.get(i));
 
}
}
[解决办法]
正解 JF
[解决办法]
String formula = "(1112 + 2134)*4265-436436"; 
StringBuilder sb = new StringBuilder();
for (int i=0; i<formula.length(); i++) {
char c = formula.charAt(i);
if (c < '0' || c > '9') {
if (sb.charAt(sb.length()-1) != ',') {
sb.append(",");
}
} else {
sb.append(c);
}
}
String[] rst = sb.toString().split(",");
System.out.println(Arrays.toString(rst));
[解决办法]
同意ls的

Java code
String formula = "(1112 + 2134)*4265-436436";  StringBuilder sb = new StringBuilder(); for (int i=0; i <formula.length(); i++) {     char c = formula.charAt(i);     if (c  <  '0 '  ¦ ¦ c  >  '9 ') {         if (sb.charAt(sb.length()-1) !=  ', ') {             sb.append(",");         }     } else {         sb.append(c);     } } String[] rst = sb.toString().split(","); System.out.println(Arrays.toString(rst));
[解决办法]
public static void main(String[] args) {

String str = "(1112 + 2134)*4265-436436";
Pattern pat = Pattern.compile("\\D{1,}");
String[] strArr = pat.split(str);
for(int i=0;i<strArr.length;i++){
if(!"".equals(strArr[i]))
System.out.println(strArr[i]);
}
}


[解决办法]
哥们,你要做的就是解析一个数学算术试的问题吧

解析出来并不难,有很多方法,他的计算才是一个经典的编程问题,既计算器的实现
我先说如何解析吧
以上各位给的各种解析,都可以实现,但是对于这种方面的解析,在java中一般是用正则表达式来实现的
例如:
Java code
 

import java.util.LinkedList;

public class StringSplit {

public static void main(String[] args) {
String s = "123+23+45";
//取到输入的算术式
//解析算术式,把分别把数字,运算符放入number,和op中
LinkedList <String> number = new LinkedList <String>();
LinkedList <String> op = new LinkedList <String>();
for (String n : s.split("\\W")) {
number.add(n);
}
System.out.println("计算之前 number:" + number + " 个数 :"
+ number.size());
for (String o : s.split("\\w+")) {
op.add(o);
}
System.out.println("计算之前 op:" + op + " 个数 :"
+ op.size());
}

}

//output:

计算之前 number:[123, 23, 45] 个数 :3
计算之前 op:[, +, +] 个数 :3


这样解析出来要注意的是:op中第一个是“”,计算时需要移除!
关于他的具体计算,最经典的计算是用栈来实现,网上资料很多,自己去找个看
我下面用一个另外的方法实现:
import java.util.Iterator;
import java.util.LinkedList;

public class StringSplit {

public static void main(String[] args) {
String s = "1*2*4+4+5+6-7*2*9/2+9";
System.out.println("要计算的算术式:" + s);
//解析算术式,把分别把数字,运算符放入number,和op中
LinkedList <String> number = new LinkedList <String>();
LinkedList <String> op = new LinkedList <String>();
for (String n : s.split("\\W")) {
number.add(n);
}
System.out.println("计算之前 number:" + number + " 个数 :"
+ number.size());
for (String o : s.split("\\w+")) {
op.add(o);
}
System.out.println("计算之前 op:" + op + " 个数 :"
+ op.size());
op.remove(0); // 第1个元素为"",移除

//先计算*,/运算,并把计算过的数和运算符设置为字符串null,对于数的设置把左操作数
//置字符串null,右操作数置为2数运算的结果
for (int i = 0; i < number.size() - 1; i++) {
String p = op.get(i);
if (p.equals("*")) {
int n = Integer.parseInt(number.get(i))
* Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else if (p.equals("/")) {
int n = Integer.parseInt(number.get(i))
/ Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
}
}
//System.out.println("乘除运算完毕!");
//将number,op中置null的删除
for (Iterator <String> it = number.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}

//System.out.println("进行乘除计算后剩余的计算数: number:" + number + "个数:"
//+ number.size());
for (Iterator <String> it = op.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}



//进行+,-运算
boolean flag = true;
while (flag) {
//运算过的置null字符串
for (int i = 0; i < number.size() - 1; i++) {
String p = op.get(i);
if (p.equals("+")) {
int n = Integer.parseInt(number.get(i))
+ Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else if (p.equals("-")) {
int n = Integer.parseInt(number.get(i))
- Integer.parseInt(number.get(i + 1));
number.set(i, "null");
number.set(i + 1, n + "");
op.set(i, "null");
} else {
continue;
}
}
//将置null的删除
for (Iterator <String> it = number.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}

for (Iterator <String> it = op.iterator(); it.hasNext();) {
if (it.next().equals("null")) {
it.remove();
}
}

//判断如果op中没有元素,将算术式也运算完毕
if (op.size() == 0) {
flag = false;
break;
}
}
String result = number.get(0);
System.out.println("result = " + result);

}

}


//output:
要计算的算术式:1*2*4+4+5+6-7*2*9/2+9
计算之前 number:[1, 2, 4, 4, 5, 6, 7, 2, 9, 2, 9] 个数 :11
计算之前 op:[, *, *, +, +, +, -, *, *, /, +] 个数 :11
result = -31



热点排行