字符串中数字子串的求和

时间:2023-01-04 17:20:38

字符串中数字子串的求和

【题目】

  给定一个字符串str,求其中全部数字串所代表的数字之和。

【要求】

  1、忽略小数点字符,例如"A1.3",其中包含两个数字1和3。

  2、如果紧贴数字子串的左侧出现字符'-',当连续出现的数量为奇数时,则数字为负数,连续出现的数量为偶数时,则数字为正数。例如,"A-1BC--12",其中包含数字是-1和12。

【举例】

  str="",返回36;

  str="a-1b--2c--d6e",返回7;

【解答】

  

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner s = new Scanner(System.in);
String str = s.next();

System.out.println(numSum(str));
}

public static int numSum(String str) {
char[] s = str.toCharArray();
int sum = 0;// 所有数字之和
int num = 0;// 保存当前连续的数字
boolean flag = true;// 判断是否为负数,true为正数
for (int i = 0; i < s.length; i++) {
int cur = s[i] - '0';// 当前的字符
if (cur >= 0 && cur <= 9) {
// 不管cur之前字符是否为数字,累加num
num = num * 10 + (flag ? cur : -cur);
} else {
sum += num;// 遇到不是数字的字符,先把之前的数字num累加到sum
num = 0;// 遇到不是数字的字符,将num赋值为0
if (s[i] == '-') {// 判断当前字符是否是'-'
if (s[i - 1] == '-') {// 如果当前的'-'的上一个字符也是'-',则将flag取反。
flag = !flag;
} else {
flag = false;// 如果当前的'-'上一个字符不是'-',需要将flag重新赋值为false
}
} else {
flag = true;// 如果当前字符不是'-',需要将flag重新赋值为true,只有连续的'-'才会累加取反。
}
}
}
sum += num;
return sum;
}
}