Java使用RegEx调用str.split返回空元素,如何正确提取四则运算符?
问题原因
你原本的split逻辑是通过匹配「非运算符的单个字符」作为分隔符切割字符串,字符串开头和连续的非运算符字符切割后会产生大量空字符串,不符合需求。
解决方案
推荐直接用正则匹配提取所有运算符的方式实现,逻辑更清晰,也不会产生多余空串:
修改后的代码
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.Arrays; // 核心逻辑部分 public List<String> getOperators(String str) { List<String> operators = new ArrayList<>(); // 匹配+、-、*、/四个运算符 Pattern pattern = Pattern.compile("[+\\-*/]"); Matcher matcher = pattern.matcher(str); while (matcher.find()) { operators.add(matcher.group()); } return operators; } // 如果需要返回数组类型,调用时可以这样写: // String[] operandsArray = getOperators(str).toArray(new String[0]);
效果验证
- 输入
"55+5",输出数组内容为["+"] - 输入
"55+6-6*6/6",输出数组内容为["+", "-", "*", "/"] - 输入
"5+5+5+5",输出数组内容为["+", "+", "+"]
完全符合预期需求。
可选:split实现方式(不推荐)
如果一定要用split逻辑实现,可以在切割后过滤空字符串:
String[] operandsArray = str.split("[^+\\-*/]"); // 过滤所有空串 operandsArray = Arrays.stream(operandsArray).filter(s -> !s.isEmpty()).toArray(String[]::new);
内容的提问来源于stack exchange,提问作者WhatTheWhat
相关产品推荐
相关产品推荐

