统计一个字符串中整数的个数

面试之中问到了一个算法:在一个字符串中,统计出现的整数的个数,连续的数字为一个整数(不考虑负数),字符串中不包含空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* a10b20c30de40fg
* 思路:首先要遍历所有的字符,判断每个字符是不是数字,是数字的话就把它放在一个StringBuilder对象
* 里面并标记,下面一个字符要是数字就加在后面,不是数字的话,就把当前的StringBuilder里面的数字
* 塞到list里面,最后判断list长度即可
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
scanner.close();
if (s != null && s.length() != 0) {
List<Integer> list = new ArrayList<Integer>();
StringBuilder sb = new StringBuilder();
boolean isChar = false;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c >= '0' && c <= '9') {
sb.append(s.charAt(i));
if (i == s.length() - 1) {
list.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
}
isChar = false;
} else {
if (sb.length() > 0 && isChar == false) {
list.add(Integer.parseInt(sb.toString()));
sb.setLength(0);
}
isChar = true;
}
}
System.out.println(list.size());
}
}

如果要是换个问法也是一样的,统计一个字符串中出现整数的和,只需要在下面加入一个遍历list,把所有的数字加一起就好了。

1
2
3
4
5
6
7
if (list.size() > 0) {
int sum = 0;
for (int i = 0; i < list.size(); i++) {
sum = sum + list.get(i);
}
System.out.println(sum);
}