Java中如何按空格及特殊字符拆分字符串?
解决方案:使用带捕获组的正则表达式拆分并过滤空项
要实现你需要的拆分效果,核心思路是:把空格作为普通分隔符(拆分后丢弃),而**括号()、逗号、算术运算符(比如+)**作为需要保留的分隔符,通过正则捕获组让这些字符被保留在拆分结果中,最后过滤掉拆分过程中产生的空字符串即可。
具体正则表达式
Java中split()方法的正则参数可以写成:
"\\s|([(),+])"
正则说明
\\s:匹配任意空白字符(这里就是空格),作为分隔符,拆分后不会保留在结果里;([(),+]):用捕获组包裹我们需要保留的分隔符——(、)、,、+。Java的split()方法会将捕获组匹配到的内容保留在拆分结果数组中;|:表示“或”逻辑,即匹配空格,或者匹配捕获组里的任意字符。
完整Java代码示例
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class SplitExample { public static void main(String[] args) { String input = ".more opr (&x NE &m),&n+1"; // 拆分字符串 String[] rawParts = input.split("\\s|([(),+])"); // 过滤空字符串(拆分时产生的无效空项) List<String> finalParts = Arrays.stream(rawParts) .filter(part -> !part.isEmpty()) .collect(Collectors.toList()); // 输出结果 System.out.println(finalParts); // 输出:[.more, opr, (, &x, NE, &m, ), ,, &n, +, 1] } }
扩展说明
如果需要支持更多算术运算符(比如-、*、/),只需要修改正则里的字符类部分即可,比如:
"\\s|([(),+\\-*/])"
注意-在字符类里如果不是放在开头/结尾,需要转义(写成\\-),避免被解析为范围符号。
内容的提问来源于stack exchange,提问作者Nihal Karne
相关产品推荐
相关产品推荐

