提取数字问题

来源:互联网 发布:python 远程ssh 编辑:程序博客网 时间:2024/06/07 22:53

问题描述:提取出一字符串中的数字,将数字相加求和。如果某个数字右边是字母,则舍去该数字。例如:123abc5++.提取数字:12和5.求和为17.
两种方法:
方法一:一个一个字符进行遍历,判断是否符合条件。

public class SumFromStr {    static int pos = 0;    public static void main(String[] args) {        String str = "123a123*25AFA***12545afe";        char[] chs = str.toCharArray();        int sum = 0;        int num = 0;        while((num=GetNum(chs,pos))!=0){            sum+=num;        }        System.out.println(sum);    }    public static int GetNum(char[] chs,int i){        String str="";        for(int j=i;j<chs.length;j++){            if(chs[j]>='0'&&chs[j]<='9'){                str+=chs[j];                if((chs[j+1]>='a'&&chs[j+1]<='z')||(chs[j+1]>='A'&&chs[j+1]<='Z')){                    str = str.substring(0, str.length()-1);                    pos=j+2;                    return Integer.parseInt(str);                }else{                    if(!(chs[j+1]>='0'&&chs[j+1]<='9')){                        pos=j+2;                        return Integer.parseInt(str);                    }                }            }        }        return 0;    }}

方法二:使用正则表达式提取数字

public class SumFromStr {    public static void main(String[] args) {        String str = "123a123*25AFA***12545afe";        String regex = "\\d[a-zA-Z]";        str = str.replaceAll(regex, "*");        System.out.println(str);        String[] strs = str.split("[^0-9]+");        System.out.println(Arrays.toString(strs));        int sum=0;        for(String num:strs){            sum+=Integer.parseInt(num);        }        System.out.println(sum);    }}