给出一个字符串,其中有数字和其他字符,获取所用数值和(数字前有'-'字符要带上符号,偶数个为正,奇数个位负,同时会有多个数字连在一起)。
package com.igeek;
public class StringTest {
public static void main(String[] args) {
String s="-5-2x1---12a-a222sdf2";
int sum=getSum(s);
System.out.println(sum);
}
public static int getSum(String s){
char[] arr=s.toCharArray();
int sum=0;
//用于获取单个数值
int last=0;
//count用于定义符号,1为正-1为负
int count=1;
for(int i=0; i<arr.length; i++){
int c=arr[i]-'0';
//判断当前字符是否为数字
if(c<0 || c>9){
if(arr[i]=='-'){
//遇到'-'count乘以-1转变符号
count*=-1;
}else{
//遇到其他字符count重置为1
count=1;
}
}else{
//如果是数字则获取其数值及符号
c*=count;
//把c值加到last中
last+=c;
//如果下一个字符还是数字则乘以10之后跳出循环获取下个数值
if(i<arr.length-1 && arr[i+1]>='0' && arr[i+1]<='9'){
last*=10;
continue;
}
//遇到其他字符count重置为1
count=1;
}
sum+=last;
last=0;
}
return sum;
}
}