我正在编写一个带有一系列加号和减号操作的java方法,例如
“+ 1 + 2 + 3-5”我希望它返回答案的int。
我正尽力做到这一点。我已经尝试了String.split()
方法,但它的优点和缺点有点令人困惑。
有人可以帮忙吗?不,这不是家庭作业。
答案 0 :(得分:3)
嗯,有几件事要考虑......
答案 1 :(得分:2)
这里需要shunting yard algorithm,用Java实现它应该很容易。
答案 2 :(得分:1)
通常有这些类型的问题,您需要一个二叉树。但是,您的情况更简单,您可以使用正则表达式。
Pattern pattern = Pattern.compile("([+-]?)([\\d]+)");
String str = "+10-3+20-10-20";
Matcher m = pattern.matcher(str);
while (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
}
这段代码为您提供了所有符号(group(1)
)和所有数字(group(2)
)
现在,您应该只使用正确的if子句完成while循环。
答案 3 :(得分:0)
您需要逐个字符地解析字符串。像
这样的东西int foo(String s){
int total = 0;
String currentNum = ""
for(int i =0;i<s.length;i++){
if(s[i] =="+"){
total += Integer.parseInt(currentNum);
currentNum = ""
}else if(s[i] =="-"){
total -= Integer.parseInt(currentNum);
currentNum = ""
}else{
currentNum += s[i]
}
}
return total;
}
答案 4 :(得分:0)
我会先在加号上分开。在您的示例中,您将获得“1”,“2”和“3-5”,然后通过在减号上拆分来处理每个。
答案 5 :(得分:0)
我看到了RHicke的伪代码并且弄乱了它。这是一个适合我的解决方案。虽然他的帖子在正确的轨道上,但它有一些缺失,例如处理最后一个数字以及此代码中显而易见的其他一些事情。
public static int parser(char[] s){
int total = 0;
String currentNum = "";
String currentProc = "none";
for(int i = 0; i < s.length; i++){
if(s[i] =='+'){
if(currentProc == "none"){
total = Integer.parseInt(currentNum);
currentNum = "";
}
else if(currentProc == "plus"){
total += Integer.parseInt(currentNum);
currentNum = "";
}
else{
total -= Integer.parseInt(currentNum);
currentNum = "";
}
currentProc = "plus";
}else if(s[i] =='-'){
if(currentProc == "none"){
total = Integer.parseInt(currentNum);
currentNum = "";
}
else if(currentProc == "plus"){
total += Integer.parseInt(currentNum);
currentNum = "";
}
else{
total -= Integer.parseInt(currentNum);
currentNum = "";
}
currentProc = "minus";
}else{
currentNum += s[i];
}
}
if(currentProc == "plus"){
total += Integer.parseInt(currentNum);
}
else{
total -= Integer.parseInt(currentNum);
}
return total;
}