Java如何按空格与双短横线(--)分割字符串且保留--为单独元素?
问题排查
- 原有代码的错误点:你写的
[\\s -]是正则字符类,仅支持匹配单个字符,含义是把单个空格、单个短横都作为独立分隔符。原字符串中的--会被识别为两个连续的短横分隔符,相邻分隔符之间会生成空字符串,并没有实现你想要的「把--作为整体分隔符」的逻辑。
实现方案
该需求完全可以实现,你可以使用Java正则的零宽断言特性,在分割时保留--作为独立数组元素,示例代码如下:
String t = "this is my--test string"; String[] m = t.split("\\s+|(?=--)|(?<=--)");
- 正则逻辑说明:
\\s+:匹配1个及以上连续空格,作为分隔符直接去掉(?=--):正向零宽断言,匹配--的前侧位置,分割后--会作为独立的后续元素(?<=--):反向零宽断言,匹配--的后侧位置,分割后--会作为独立的前序元素
运行代码后输出的数组结果和你期望的完全一致:["this", "is", "my", "--", "test", "string"]
内容的提问来源于stack exchange,提问作者e.f.a.
相关产品推荐
相关产品推荐

