You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java提取字符串中的数字:如何从指定格式字符串提取全部数字

嘿,这个需求很常见,用Java处理的话有几种简单实用的方案,我给你详细说说:

方案1:使用正则表达式(最简洁高效)

正则表达式是处理这类字符串提取问题的首选,直接匹配所有连续的数字序列就行。这里用\\d+来匹配一个或多个连续数字,具体代码如下:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ExtractNumbers {
    public static void main(String[] args) {
        String input = "(1234-5869)|990-9797";
        // 定义匹配连续数字的正则模式
        Pattern numberPattern = Pattern.compile("\\d+");
        Matcher matcher = numberPattern.matcher(input);
        
        StringBuilder resultBuilder = new StringBuilder();
        // 遍历所有匹配到的数字序列
        while (matcher.find()) {
            if (resultBuilder.length() > 0) {
                resultBuilder.append(" "); // 用空格分隔不同的数字组
            }
            resultBuilder.append(matcher.group());
        }
        
        // 输出结果
        System.out.println(resultBuilder.toString()); // 输出: 1234 5869 990 9797
    }
}
方案2:手动遍历字符(直观可控)

如果你不想依赖正则,也可以逐个检查字符串中的字符,把数字字符累积起来,遇到非数字时就把累积的数字加入结果:

public class ExtractNumbers {
    public static void main(String[] args) {
        String input = "(1234-5869)|990-9797";
        StringBuilder currentNumber = new StringBuilder();
        StringBuilder finalResult = new StringBuilder();
        
        for (char ch : input.toCharArray()) {
            if (Character.isDigit(ch)) {
                // 如果是数字,就加入当前数字缓冲区
                currentNumber.append(ch);
            } else {
                // 遇到非数字,且缓冲区有数字时,加入结果
                if (currentNumber.length() > 0) {
                    if (finalResult.length() > 0) {
                        finalResult.append(" ");
                    }
                    finalResult.append(currentNumber);
                    currentNumber.setLength(0); // 清空缓冲区
                }
            }
        }
        
        // 处理字符串末尾可能剩下的数字
        if (currentNumber.length() > 0) {
            if (finalResult.length() > 0) {
                finalResult.append(" ");
            }
            finalResult.append(currentNumber);
        }
        
        // 输出结果
        System.out.println(finalResult.toString()); // 输出: 1234 5869 990 9797
    }
}

两种方法都能完美满足你的需求:正则方案代码更简洁,适合大多数场景;手动遍历的方式更直观,方便你在需要的时候对提取逻辑做更多自定义调整。

内容的提问来源于stack exchange,提问作者umang rastogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:54:00