如何消除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
相关产品推荐
相关产品推荐

