62,614
社区成员
发帖
与我相关
我的任务
分享
// 输入字符串
String input = "qq222w110w1w";
//String input = "100w110w2";
// 临时保存一组数字
StringBuffer buff = null;
// 总和
int sum = 0;
// 是否开始累积数字的标志
boolean isAccumulate = false;
// 依次处理每个字符
for (int i = 0; i < input.length(); i++) {
//取得一个字符
char ch = input.charAt(i);
if (!isAccumulate) {// 还没有进入数字累积状态
if (ch >= 48 && ch <= 57) {// 遇到第一个数字字符
// 初始化临时变量
buff = new StringBuffer();
// 将新的数字字符加入到变量尾部
buff.append(ch);
// 设置标志量:开始累积数字
isAccumulate = true;
} else {// 遇到非数字字符。这个分支可以不写
// 什么也不做
// nothing
}
} else {// 在数字累积状态下
if (ch >= 48 && ch <= 57) {// 遇到数字字符
// 将数字字符加入到变量尾部
buff.append(ch);
} else {// 遇到非数字字符
// 将临时变量转成字符串,然后解析成整数
// sum+=Integer.parseInt(new String(buff));
String tmp = new String(buff);
int num = Integer.parseInt(tmp);
sum += num;
// 设置标志量:退出数字累积状态
isAccumulate = false;
}
}
}
//处理字符串以数字字符结尾的问题
if(isAccumulate){
String tmp = new String(buff);
int num = Integer.parseInt(tmp);
sum += num;
}
// 输出总和
System.out.println(sum);
public static void main(String[] args) {
String target = "qq222w110w1w";
String regex = "(\\d+)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(target);
int sum = 0;
while (m.find()) {
sum += Integer.valueOf(m.group(1));
}
System.out.println(sum);
}