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

如何消除Java数组中因字符串分割产生的多余0值?

问题原因

你的拆分逻辑出现多余0的核心原因是:正则[+x\\s]会将每个匹配的字符单独作为分隔符,当输入5x+5时,x和+是连续的分隔符,拆分后会产生空字符串""。如果你的转换逻辑将空字符串默认转为0,就会得到[5,5,0];而5+4x拆分后末尾的空字符串被split的0参数自动忽略,所以结果正常。

解决方法

下面提供几种可行的修复方案:

1. 修改正则,合并连续分隔符

把正则改成[+x\\s]+,让连续的分隔符被当作一个整体处理,避免产生空字符串:

String input = "5x+5";
String[] parts = input.split("[+x\\s]+", 0);
int[] result = Arrays.stream(parts)
    .mapToInt(Integer::parseInt)
    .toArray();
// 结果:[5,5]

2. 过滤拆分后的空字符串

在转换int数组前,先过滤掉拆分结果中的空字符串,兼容原有正则:

String input = "5x+5";
String[] parts = input.split("[+x\\s]", 0);
int[] result = Arrays.stream(parts)
    .filter(s -> !s.isEmpty()) // 过滤空字符串
    .mapToInt(Integer::parseInt)
    .toArray();
// 结果:[5,5]

3. 直接提取数字(更可靠的方案)

如果你的表达式只需要提取数字,完全可以跳过拆分逻辑,直接用正则匹配所有数字,这种方法不受运算符、变量位置影响:

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

public class Main {
    public static void main(String[] args) {
        String input = "5x+5";
        Pattern pattern = Pattern.compile("\\d+");
        Matcher matcher = pattern.matcher(input);
        List<Integer> numList = new ArrayList<>();
        
        while (matcher.find()) {
            numList.add(Integer.parseInt(matcher.group()));
        }
        
        int[] result = numList.stream().mapToInt(Integer::intValue).toArray();
        // 结果:[5,5]
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:55:17