到目前为止,我有这个代码将两个不同的字符串操作数解析成double并将它们加在一起
如何修改它以便它可以添加任意数量的字符串操作数?
double addMultipleDigits(String exp)
{
ArrayList<Double> wholeExpression = new ArrayList<Double>();
double answer = 0;
for(int i=0;i<exp.length();i++)
{
if(exp.charAt(i)=='+')
{
answer=Integer.parseInt(exp.substring(i-1, i)) + Integer.parseInt(exp.substring(i+1, i+2));
wholeExpression.add(answer);
System.out.println(wholeExpression.get(0));
}
}
return answer;
}
答案 0 :(得分:8)
更改签名以添加varargs。
double addMultipleDigits(String... exp)
它可以在方法体中作为String数组处理。
答案 1 :(得分:6)
看起来你想要varargs:
double addMultipleDigits(String... expressions)
此处的expressions
参数只是一个常规数组,因此您仍然可以使用.length
等。
然后你可以用数组显式调用它,或者只用几个参数调用它:
addMultipleDigits("123", "456");
答案 2 :(得分:2)
如果没有正确的理论基础(我从未想过我会这么说),解析和评估表达式是不可能做到的。您需要了解词法分析器和解析器,以及它们的工作原理。从输入中生成解析树后,您可以对其进行评估,或者对其进行内联评估。
答案 3 :(得分:1)
所有答案都说正确的信息使用可变数量的争论。但根据您的评论,您似乎希望将参数放在单个字符串中,例如1 + 5 + 10。
最好使用varargs,但必须使用单个字符串,然后才能使用StringTokenizer。例如
StringTokenizer st = new StringTokenizer("1+2+3","+");
while (st.hasMoreTokens()) {
String s = st.nextToken(); // s is the separated string.
}
答案 4 :(得分:0)
您可以在varargs找到更多信息。
void foo(String... args)
{
for (String s : args)
{
System.out.print(s);
}
}