我要做的是在给定字符串内部的变量的情况下,使用接口方法来完成任务。我给出的字符串,“s”可以由数字,+, - 和*符号组成。整数返回相当容易,因为我正在做的是返回该int的整数接口方法。但是,对于其他3个符号,我需要递归地合并一个方法来查找左右节点。我在下面发布了我的代码......
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 :(得分: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(parse [0]);
答案 1 :(得分:0)
由于您传递给split的参数是正则表达式,因此您只需执行以下操作:
String[] ss = "12121+34234 *23423 -123123 *123123-12312+1231231-123123".split("\\s?[\\+\\-\\*]\\s?");
这样你就可以在你得到+, - 或*的地方分割你的字符串(可能在之前或之后有空格)。
请在拆分之前对字符串进行空值检查:D
希望它有所帮助。
答案 2 :(得分:0)
好像你想检查解析[1]等于“+”而不是解析[0]。 你会期望1 + 2而不是+ 1 2。