📜  java从字符串中分离数字 - Java(1)

📅  最后修改于: 2023-12-03 14:42:59.800000             🧑  作者: Mango

从字符串中分离数字 - Java

在Java中,有时候需要从一个字符串中提取数字部分,比如从用户输入的字符串中获取数值,或者从文件名中截取数字等。本文介绍几种常见的从字符串中分离数字的方法。

方法一:使用正则表达式

可以使用正则表达式来匹配数字部分,然后将其提取出来。以下是一个示例代码:

String str = "abc123def456";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    int num = Integer.parseInt(matcher.group());
    System.out.println(num);
}

上述代码中,正则表达式\d+匹配一个或多个数字字符。matcher.find()方法会查找下一个匹配结果,如果找到则返回true。matcher.group()方法返回匹配结果,即数字部分。将其转换为整型即可。

方法二:使用StringTokenizer类

StringTokenizer类可以将字符串按指定的分隔符拆分成多个部分。在本例中,我们将字符串按非数字部分拆分成多个字符串,然后只保留其中的数字部分。以下是一个示例代码:

String str = "abc123def456";
StringTokenizer st = new StringTokenizer(str, "\\D+");
while (st.hasMoreTokens()) {
    int num = Integer.parseInt(st.nextToken());
    System.out.println(num);
}

上述代码中,\\D+表示一个或多个非数字字符,也就是我们要从字符串中去掉的部分。st.hasMoreTokens()方法查找是否还有未处理的分隔符或者字符串。st.nextToken()方法返回下一个分隔符之间的部分,即数字部分。

方法三:使用字母和数字的ASCII码值

这种方法利用了字母和数字在ASCII码表中的顺序特性。数字字符的ASCII码值连续,可以根据这个特性判断每个字符是否是数字字符。以下是一个示例代码:

String str = "abc123def456";
int i = 0;
int j = 0;
while (i < str.length()) {
    char c = str.charAt(i++);
    if (c >= '0' && c <= '9') {
        j = j * 10 + c - '0';
    } else {
        if (j > 0) {
            System.out.println(j);
            j = 0;
        }
    }
}
if (j > 0) {
    System.out.println(j);
}

上述代码中,charAt()方法返回字符串中指定索引位置的字符。如果字符是数字字符,则依次将其转换成整型数字,最后构造出完整的数字。如果字符不是数字字符,则输出之前构造的数字部分。需要特别注意的是,最后一组数字可能会没有分隔符,因此需要在循环外部再判断一次。

以上是三种常见的从字符串中分离数字的方法,选择合适的方法可以提高代码的效率和可读性。