求字符串中数字之和

本题来自左程云所著《程序员代码面试指南》,欢迎大家购买此书,很值得推荐。

要求

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;
}
点赞