拆分字符串但不删除分隔符

时间:2016-06-29 17:06:17

标签: java regex split

我有一个示例字符串:abcd $cvzasd$ waedqwe$qewrerw$dsaxcz $dasdasd$ $fowjew$ dsadsa。 $符号是我的分隔符。我想拆分这个String,但不要删除分隔符$。我想在结果列表中包含以下8个元素:

abcd, $cvzasd$, waedqwe, $qewrerw$, waedqwe, dsaxcz, $dasdasd$, $fowjew$, dsadsa 

我怎么能得到那个结果?它有可能为此创建正则表达式吗?我找到了一个很好的例子:Java: Split String with Regex without deleting delimiters但这并不能让我满意,因为在例子中使用了分隔符<和>它只适用于不同的分隔符。

否则我找到了一个解决方案,通过添加我的标志附加标志来替换我的标志。示例将$ by替换为$,并按 - 分隔。但我觉得对我来说不是一个好办法。

2 个答案:

答案 0 :(得分:1)

您可以利用Java正则表达式引擎支持的约束宽度lookbehind(Java lookbehinds中允许使用{0,100}有限量词,只需确保在值较长时调整值):

\s+|(?=(?<!\$\w{0,100})(?<!\s)\$)|(?<=\$(?!\w{0,100}\$))

请参阅regex demo

Java demo

String pat = "\\s+|(?=(?<!\\$\\w{0,100})(?<!\\s)\\$)|(?<=\\$(?!\\w{0,100}\\$))";
String s = "abcd $cvzasd$ waedqwe$qewrerw$dsaxcz $dasdasd$ $fowjew$ dsadsa";
String[] res = s.split(pat);
System.out.println(Arrays.toString(res));
// => [abcd, $cvzasd$, waedqwe, $qewrerw$, dsaxcz, $dasdasd$, $fowjew$, dsadsa]

答案 1 :(得分:-1)

与luk2302说的一样,你可以使用空格作为分隔符,将列表中的项目与另一个项目分开:

public class SplitEx {
    public static void main(String[] args) {
        String s = "abcd $cvzasd$ waedqwe $dasdasd$ $fowjew$ dsadsa";
        String[] parts = s.split("\\s+"); // note: returns an array
        System.out.println(Arrays.toString(parts));
    }
}

打印:

[abcd, $cvzasd$, waedqwe, $dasdasd$, $fowjew$, dsadsa]