从数学表达式字符串中提取数字

时间:2013-03-30 06:51:28

标签: java string

我想从一个简单的数学表达式String中提取Numbers; 我首先用空格替换String中的所有数学字符,然后尝试用空格分割String然后我将数字放到ArrayList

public ArrayList<Integer> retriveNumbers(String Expr) {
    ArrayList<Integer> numbers = new ArrayList();
    Expr = Expr.replaceAll("^", " ");
    Expr = Expr.replaceAll("[*]", " ");
    Expr = Expr.replaceAll("/", " ");
    Expr = Expr.replaceAll("[+]", " ");
    Expr = Expr.replaceAll("-", " ");
    Expr = Expr.replaceAll("%", " ");
    String[] elements = Expr.split(" ");
    for(String e : elements){
        numbers.add(Integer.parseInt(e));
    }
    return  numbers;
}

但是当我测试它时,我在numbers.add(Integer.parseInt(e));

的输出中给出了错误
Calculator c1 = new Calculator();
ArrayList<Integer> arr = c1.retriveNumbers("4*5-2+1");
for(int i: arr)
    System.out.println(i);

6 个答案:

答案 0 :(得分:3)

您需要将替换的字符串分配回Expr -

Expr = Expr.replaceAll("^", " "); // do this for all replacements

并且,还要检查空字符串 -

        if(!e.isEmpty()) {
            numbers.add(Integer.parseInt(e));
        }

这就是它,它将适用于这些变化。

答案 1 :(得分:2)

字符串不可变的,您对它们执行的操作会产生新的结果,因此您需要将其分配给 new String

Expr = Expr.replaceAll("^", " ");

其他所有人都一样。

顺便说一句,我建议您关注Java naming conventions并将字符串名称更改为expr(以小写字母开头),将方法名称更改为RetriveNumbers,大写为R.

答案 2 :(得分:1)

试试这个

无需替换每个特殊字符。

你可以简单地用空替换非数字 即

str=str.replaceAll("[^0-9]","");

示例:

 String str="asdfas234234**&^%*&";

      str=str.replaceAll("[^0-9]","");

  System.out.println(str);

答案 3 :(得分:0)

阅读 Pattern javadoc

String expression = "4.43*5-2+1";
String expNumbers = expression.replaceAll("[^0-9\\.]", " ");
System.out.println(expNumbers);

答案 4 :(得分:0)

尝试以下一种衬垫解决方案。

  expr = expr.replaceAll("[\\^*%\\-+\\\\]", " ");

完整的课程将如下所示。

import java.util.ArrayList;
import java.util.List;

public class Calculator {
    public static void main(String[] args) {
        Calculator c1 = new Calculator();
        List<Integer> arr = c1.retriveNumbers("4*5-2+1");
        for(int i: arr)
            System.out.println(i);
    }

    public List<Integer> retriveNumbers(String expr) {
        List<Integer> numbers = new ArrayList<Integer>();

        expr = expr.replaceAll("[\\^*%\\-+\\\\]", " ");
        String[] elements = expr.split(" ");
        for (String e : elements) {
            numbers.add(Integer.parseInt(e));
        }
        return numbers;
    }

}

答案 5 :(得分:0)

像这样使用

class test
{
public static ArrayList<Integer> retriveNumbers(String Expr){
ArrayList<Integer> numbers = new ArrayList();
String[] elements = Expr.replaceAll("[^0-9]"," ").replaceAll("\\s+"," ").trim().split(" ");;
for(String e : elements){
    numbers.add(Integer.parseInt(e));
}
return  numbers;
}
public static void main(String[] args) 
{
ArrayList<Integer> arr =retriveNumbers("4*5-2+1");
for(int i: arr)
    System.out.println(i);
}
}