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

解决方案 »

  1.   

    最后输出的就是分离后的数据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));
       
    }
    }
      

  2.   

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

  3.   

    同意ls的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));
      

  4.   

    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]);
    }
    }
      

  5.   

    哥们,你要做的就是解析一个数学算术试的问题吧解析出来并不难,有很多方法,他的计算才是一个经典的编程问题,既计算器的实现
    我先说如何解析吧
    以上各位给的各种解析,都可以实现,但是对于这种方面的解析,在java中一般是用正则表达式来实现的
    例如:
    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