我有一个示例字符串: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替换为$,并按 - 分隔。但我觉得对我来说不是一个好办法。
答案 0 :(得分:1)
您可以利用Java正则表达式引擎支持的约束宽度lookbehind(Java lookbehinds中允许使用{0,100}
有限量词,只需确保在值较长时调整值):
\s+|(?=(?<!\$\w{0,100})(?<!\s)\$)|(?<=\$(?!\w{0,100}\$))
请参阅regex 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]