2014-02-18 132 views
0

我想要做的是合併接口方法來完成賦予字符串內部變量的任務。我給出的字符串「s」可以由數字,+, - 和*符號組成。整數返回相當容易,因爲我所做的只是返回該int的整數接口方法。但是,對於其他3個符號,我需要遞歸合併一個方法來查找左右節點。我已爲我下面的代碼...解析Java字符串類型錯誤

public static Expression parseString(String s) { 
     String[] parse = s.split("\\s+"); 
     String[] parsecopy; 
     Expression exp1; 
     Expression exp2; 

     if(s == null) { 

      return null; 
     } 

     if(parse[0].equals("+")) { 
      exp1 = parseString(parse[0]); 
      parsecopy = Arrays.copyOfRange(parse, 2, parse.length); 
      exp2 = parseString(parsecopy); 
      return new AddExpression(exp1, exp2); 
     } 
     else if() { 

問題 - 所以我的代碼創建原始字符串的副本,以查找該串的下一個項目。我通過使用Array函數copyOfRange()來做到這一點。但是,當我想調用exp2 = parseString(parsecopy)時,我收到一個錯誤,因爲parseString需要一個字符串參數,該參數必須是String []類型。我試圖得到parsecopy而不是parsecopy [0]的原因是因爲parsecopy不會創建一個無限循環,我實際上可以遍歷字符串。

Error code - The method parseString(String) in the type Parse is not applicable for the arguments (String[]) 

回答

0
if(parse[0].equals("+")) { 
      exp1 = parseString(parse[0]); 
      parsecopy = Arrays.copyOfRange(parse, 2, parse.length); 
      exp2 = parseString(parsecopy); 
      return new AddExpression(exp1, exp2); 
     } 

EXP1 = parseString(解析[0]);

你正在這裏做遞歸調用。

+0

問題是我得到一個無盡的while循環在解析[0] – user2908101

+0

,它需要我必須做parsecopy [0]替代parsecopy – user2908101

0

既然你傳遞給分割參數是一個正則表達式,你可以簡單地做:

String[] ss = "12121+34234 *23423 -123123 *123123-12312+1231231-123123".split("\\s?[\\+\\-\\*]\\s?"); 

這樣無論你有一個+你分割你的字符串 - ,或*(可能與後一個空格或之前)。

並請前分裂它做字符串的空檢查:d

希望它能幫助。

0

看來你想檢查parse [1]等於「+」而不是parse [0]。 你會期望1 + 2而不是+ 1 2.