求字符串中数字子串求和

来源:互联网 发布:四川南充广电网络 编辑:程序博客网 时间:2024/05/29 11:38

此问题网上已经有很多解答,但是说实话我还是看不懂, 然后自己揣摩了一下,修改成比较好理解的方式,现在贴出来:

package 字符串中数字子串求和;


public class Test2 {


public static void main(String[] args) {
// TODO 自动生成的方法存根


String s="A-1B--2C--D6E";
//s="A1CD2E33";
System.out.println(add(s));
}
//我改进的易于理解的方法
private static int add(String s) {
// TODO 自动生成的方法存根
if(s==null)
      return Integer.MIN_VALUE;
int len=s.length();
int res=0;//最后需要返回的数字
int num=0;//相邻出现数字的情况下,几个相邻的数字转换成的具体数字
boolean flag=true;//判断符号的个数
int temp=0;//用来保存单个分离出来的数字
for(int i=0;i<len;i++){
temp=s.charAt(i)-'0';
   if(temp<0||temp>9){//说明不是数字,上次数字计算已经结束,本轮重新开始
                  res+=num;//开始计算上一轮计算之后的运算结果
                  num=0;//这一轮重新开始,num重新赋值为0
                  if(s.charAt(i)=='-'){//分离出来的字符不是字母而是负号 
                 flag=!flag;//改变一次符号,此处如果先前定义的flag为int

//类型,则flag=flag*(-1);
                   }
   }
   else{//出现数字的情况!
             num=num*10+(flag?temp:-1*temp);//如果先前定义的flag为int类型
             //则此处为num=num*10+flag*temp;
             flag=true;//每计算完一次后,flag重新赋值,int类型为flag=1;
           }    
          }//endfor
   res+=num;//最后一次num计算完成后,跳出for循环,需要进行加法运算
   return res;
}
}

0 0