我想从一个简单的数学表达式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);
答案 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)
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);
}
}