从字符串中提取数字(Java)
最近做项目,时常要写一些重复的逻辑,导致花费了不少时间。
字符串有固定格式
类似C语言的方式:
public void test1(){
String s = "(1,15,52,1674,64,1,5,0)";
ArrayList<Integer> array = new ArrayList<Integer>();
int i = 0;
int value = 0;
while (i < s.length()) {
if (s.charAt(i) == ','){
array.add(value);
value = 0;
i++;
continue;
}
if (s.charAt(i) >= '0' && s.charAt(i)<='9'){
value = value*10 + s.charAt(i)-'0';
System.out.println("第"+i+"轮,value:"+value);
}
i++;
}
System.out.println(Arrays.toString(array.toArray()));
}
结果:
使用正则表达式,将非数字的字符替换:
public void test2(){
String s = "(1,15,52,1674,64,1,5,0)";
// 只允数字
String regex = "[^0-9]";
// String regex = "";
//将正则规则放入Pattern中
Pattern p = Pattern.compile(regex);
//将要处理的字符串压入Pattern对象中
Matcher m = p.matcher(s); // 获取 matcher 对象
//输出Matcher对象
System.out.println(m.toString());
//使用"_"替换字符串中非数字的字符,然后将字符串输出
System.out.println(m.replaceAll("_").trim());
}
结果: