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

Java中split方法拆分含多位数表达式时出现空元素问题求助

解决Java拆分算术表达式时运算符数组出现空元素的问题

问题原因

你当前用split("[0123456789]")拆分运算符时,多位数的连续数字会被多次匹配拆分。比如输入12+34,拆分后会得到["", "+", "", ""]——因为1和2都是数字,拆分后它们之间会产生空字符串,后续只从索引1开始添加元素,会把这些空字符串也带进op数组,导致出现空元素。

修复方案

方案1:过滤空字符串

在构建op数组时,不仅跳过无效的起始元素,还要判断元素是否为空,只保留非空的运算符:

ArrayList<String> op = new ArrayList<>();
for(int i = 0; i < preop.length; i++) {
    String s = preop[i];
    if(!s.isEmpty()) { // 过滤空字符串
        op.add(s);
    }
}

方案2:直接匹配运算符(更高效)

不用通过拆分数字间接获取运算符,而是用正则直接匹配所有目标运算符(+、-、*、/),结果更准确:

// 用正则匹配所有运算符
Pattern opPattern = Pattern.compile("[+\\-*/]");
Matcher matcher = opPattern.matcher(expression);
ArrayList<String> op = new ArrayList<>();
while(matcher.find()) {
    op.add(matcher.group());
}

方案3:一次性提取数字和运算符(推荐)

如果最终要把数字和运算符按原顺序组合,最可靠的方式是用正则同时匹配多位数和运算符,一次遍历就能得到完整的拆分列表,避免拆分后再合并的冗余步骤:

ArrayList<String> exp = new ArrayList<>();
// 匹配多位数(\\d+)或任意运算符
Pattern pattern = Pattern.compile("\\d+|[+\\-*/]");
Matcher matcher = pattern.matcher(expression);
while(matcher.find()) {
    exp.add(matcher.group());
}
System.out.println("最终拆分结果: " + exp);

这个正则能精准识别一位/多位数,以及所有目标运算符,完全保留原表达式的顺序。

完整优化后的代码示例

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

public class Model {
    private Scanner sc = new Scanner(System.in);
    private String expression;

    public Model() {
        expression = sc.nextLine();
        split();
    }

    public void split() {
        ArrayList<String> exp = new ArrayList<>();
        Pattern pattern = Pattern.compile("\\d+|[+\\-*/]");
        Matcher matcher = pattern.matcher(expression);
        
        while(matcher.find()) {
            exp.add(matcher.group());
        }

        System.out.println("拆分结果: " + exp);
    }

    public static void main(String[] args) {
        new Model();
    }
}

测试输入123+45*6-78/9,输出为[123, +, 45, *, 6, -, 78, /, 9],完全符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 10:15:27