字符串问题之 字符串中的数字子串求和
要求
1、 忽略小数点 如 A1.3 包含的是两个数字 1 和 3
2、紧贴数字子串的左侧出现字符“-” 连续次数为奇数时候 为负数 , 偶数时候为正数。
比如: “A-1BC--12” 其中包含数字为-1 和 12
str="A1CD2E33" 返回36
str="A-1B--2C--D6E" 返回7
这个题目的实现方法有很多种,下面我来给大家演示一种哈~~~~~
这个题目就是实现 如何从左到右遍历str时,准确收集每个数字并累加起来
实现步骤:
三个变量 int res 表示目前的累加和
int num 表示当前收集到的数字
boolean posi 表示如果把num累加到res里, num是正还是负
package TT; public class test2 { public static int numSum(String str){ if(str==null){ return 0; } char[] charArr = str.toCharArray(); int res = 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){ res+=num; num = 0; if(charArr[i]=='-'){ if(i-1>-1 && charArr[i-1]=='-'){ posi=!posi; }else{ posi = true; } } }else{ num = num * 10 + (posi ? cur : -cur); } } res += num; return res; } public static void main(String[] args){ String str ="A1CD2E33"; int a = numSum(str); System.out.println(a); } }
结果:36
public class t3 { public static Integer getSubSum(String str){ char[] chars = str.toCharArray(); //所有number的累加 int sum = 0; //整理数据值 int number = 0; //'-'符号的计算 int negativeCount = 0; //countFlag 决定是否进行计算 boolean countFlag = true; for (int i =0 ; i< chars.length; i++){ char nowChar = chars[i]; //对于正负数的统计使用 if (nowChar == '-' && chars[i-1] != '-'){ negativeCount = 1; } if (nowChar == '-' && chars[i-1] == '-'){ negativeCount++; } //数据number的计算 int now = chars[i] - '0'; if ( 0 < now && now < 9 ){ //将字符组合成数字 number = number * 10 + now; countFlag = true; } else { //所有number的累加 //正数情况 if (negativeCount % 2 == 0 && countFlag) { sum = sum + number; } else { //负数情况 if (countFlag) { sum = sum - number; } } //计算完毕后的清理 //运算结束 number 清空 number = 0; countFlag = false; } } //最后的不能遗漏 if (0 < chars[chars.length-1] - '0' || chars[chars.length-1] - '0'< 9){ sum = sum + number; } return sum; } public static void main(String[] args){ String testStr = "A1CD2E33"; Integer subSum = getSubSum(testStr); System.out.println(subSum); } }