本题来自左程云所著《程序员代码面试指南》,欢迎大家购买此书,很值得推荐。
要求
1.忽略小数点字符,例如“a1.3”,其中包含两个数字1和3。
2.如果紧贴数字字符串左侧有‘-’出现,当连续出现的次数为奇数时,数字视为负数,如果连续出现的次数为偶数时,数字视为正数。例如:“a-123dfd–345”,其中包含连个数字-123和345。举例
str=”adf12dfgd4gfdsg”,return 16。
public int numsum(String str){
if(str==null) return 0;
char[] charArr=str.toCharArray();
int result=0; //保存结果
int num=0; //记录当前遍历的数字
boolean posi=true;
int cur=0;
for(int i=0;i<charArr.length;i++){
cur=charArr[i]-'0';
if(cur<0||cur>9){
result+=num;
num=0;
if(charArr[i]=='-'){
if(i-1>-1&&charArr[i-1]=='-'){
posi=!posi;
}else{
posi=false;
}
}else{
posi=true;
}
}
else{
num=num*10+(posi?cur:-cur);
}
}
result+=num;
return res;
}