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