2013-03-30 75 views
0

我想從簡單的數學表達式中提取數字字符串; 我第一次更換所有數學符號用空格字符串,然後嘗試字符串用空格分開,然後我把號碼一個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

你檢查由retrieveNumbers返回的list()方法,什麼是它的內容? –

+0

嘗試在解析之前在控制檯上打印'e' – Apurv

+0

您正在使用java 6或7 –

回答

1

試試這個

無需更換每一個特殊的角色。

你可以簡單的用空 即

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

實例代替非數字:

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

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

    System.out.println(str); 
+0

在這裏檢查http://browxy.com/SubmittedCode/12722 – Pragnani

+0

如果我想保持負號和浮點數,我該怎麼辦? – Ehsan

+1

@Ehsan str = str.replaceAll(「[^ - 0-9。]」,「」);使用這個 – Pragnani

3

你需要指定替換字符串回Expr-

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

而且,還檢查空與字符串

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

就是這樣,它將適用於這些更改。

2

字符串不變,你對它們執行的操作做出新的成績,所以你需要將它分配給新的String

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

與同爲所有其他人。

順便說一句,我建議你遵循Java naming conventions並更改字符串名稱expr(用小字母開頭)和方法名RetriveNumbers資本R.

+0

這是什麼意思? – Maroun

+0

我注意到,謝謝 – Ehsan

+0

不客氣:) – Maroun

0

閱讀 Pattern javadoc

String expression = "4.43*5-2+1"; 
String expNumbers = expression.replaceAll("[^0-9\\.]", " "); 
System.out.println(expNumbers); 
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; 
    } 

} 
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); 
} 
} 
相關問題