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

Java如何从字符串中提取所有整数(含负整数)并存入int数组

Java从混合字符串中提取正负整数解决方案

问题根源

你原来使用的split("[^0-9-]+")逻辑仅将非数字、非负号的字符作为分隔符,当负号直接跟在数字后方时,不会被识别为拆分边界,因此会出现59-12这类拼接的不符合预期的字符串。

最优实现方案

建议换用正则匹配的逻辑直接提取所有符合规则的整数字符串,比调整split分隔符正则更简单直观,不会出现边界问题。匹配使用的正则为-?\\d+,其中-?表示负号可选,\\d+表示至少一位数字,完全适配你给出的输入规则。

完整代码示例

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

public class ExtractInt {
    public static void main(String[] args) {
        String str = readString();
        // 编译匹配整数的正则
        Pattern numPattern = Pattern.compile("-?\\d+");
        Matcher matcher = numPattern.matcher(str);
        List<String> numStrList = new ArrayList<>();
        // 遍历所有匹配结果
        while (matcher.find()) {
            numStrList.add(matcher.group());
        }
        // 转换为字符串数组,对应你需要的输出格式
        String[] arr = numStrList.toArray(new String[0]);
        // 如果需要直接得到int类型数组,可使用如下代码
        // int[] intArr = numStrList.stream().mapToInt(Integer::parseInt).toArray();
    }

    // 你原有的readString方法
    private static String readString() {
        // 方法实现省略
        return "abc59-12abc56-10abc10";
    }
}

测试你给出的输入abc59-12abc56-10abc10时,得到的arr数组内容就是{"59","-12","56","-10","10"},完全符合要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:54:04