题目:
给定一个字符串str,求其中全部数字串所代表的数字之和。
要求
1.忽略小数点
2.考虑‘-’,如果有连续奇数个,则为负,如果有连续偶数个,就为正数。
举例:
str=“A-1B–2C–D6E” return 7
思路:
- 判断是不是0-9
- 不是数字,判断是不是-
- 如果是- 是不是第一个-,第一个符号设置为负,如果不是,则翻转符号
- 不是-,那么符号设置为正,保证没有-时候数字是正的
- 最后 sum+一下,以防最后是数字,没有遇到非数字没有加上
public class Trr {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(numSum("11-2-3"));
}
public static int numSum(String s1) {
if(s1==null) {return 0;}
char[] chas=s1.toCharArray();
int sum=0;
int num=0;
int cur;
boolean symbol=true;
for(int i=0;i<s1.length();i++) {
cur=chas[i]-'0';
if(cur<0||cur>9) {
sum+=num;
num=0;
if(chas[i]=='-') {
if((i-1)>-1 && chas[i-1]=='-') //首先判断是不是第一个-
{
symbol=!symbol;
}
else{
symbol=false;//第一个要直接取-;防止-12-1这种情况-12 取负了这时候-1直接翻转就变成正了
}
}
else {
symbol=true;//这个是如-12a3,如果a处没有变正,则3计算时候是按负。
}
}else {
num=num*10+(symbol?cur:-cur);//这里不用sum 为了计算连续的数字
}
}
sum+=num;//防止后的是数字没有加上
return sum;
}
}