这是我的代码:
String test = "12+23-42-53+4-31";
int counter = 0;
Stack<Integer> numb= new Stack<Integer>();
Stack<String> op = new Stack<String>();
for(int i = 0; i<test.length();i++){
if(test.charAt(i)=='-' || test.charAt(i)=='+'){
int number = Integer.parseInt(test.substring(counter, i));
counter=i+1;
numb.push(number);
String oper = Character.toString(test.charAt(i));
op.push(oper);
}
}
如果我循环通过麻木堆栈,则缺少最后一个测试字符串数。有没有解决方案?
答案 0 :(得分:1)
退出for循环时,不添加最后一个数字,因为测试字符串末尾没有“ - ”或“+”符号。
退出for循环后,只需将最后一个数字推入麻木堆栈。
提示:counter是最后一个数字开始的位置,最后一个位置是字符串长度。
如果你这样做并打印堆栈:
//Print the stacks to see result
System.out.println(numb.toString());
System.out.println(op.toString());
您将获得以下输出:
[12, 23, 42, 53, 4, 31]
[+, -, -, +, -]
答案 1 :(得分:0)
在if
语句中,您可以测试字符是'-'
还是'+'
。然后,您解析之前的数字。所以你应该在for
- 循环结束后解析最后一个数字。
答案 2 :(得分:0)
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Object o = engine.eval("12+23-42-53+4-31");
System.out.println(o);