2014-02-18 131 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.