我需要在每第四个管道之后拆分一个像下面这样的字符串 -
输入 -
userid456|userid457|userid458|userid459|userid460|userid461|userid462|userid463|userid464|userid465|userid466|userid467|userid468|userid469|userid470|userid471|userid472|userid473|userid474|userid475|userid476|userid477|userid478|userid479|userid480|userid481|userid482|userid483
输出 -
userid456|userid457|userid458|userid459
userid460|userid461|userid462|userid463
userid464|userid465|userid466|userid467
userid468|userid469|userid470|userid471
等
试图找出使用regexp和String.split()的简单方法
答案 0 :(得分:1)
您可以使用此正则表达式使用匹配项来代替使用split
:
(?:[^|]+\|){3}[^|]+
Java代码:
final String regex = "(?:[^|]*\\|){3}[^|]*";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Match: " + matcher.group(0));
}
答案 1 :(得分:0)
你最好不要分配而不是分裂 它的效果相同,但控制力更强。
((?:[^|]*?\|){3}[^|]*?)\||([\S\s]+)
解释
( # (1 start)
(?: # Group - 3 pipes
[^|]*? # Optional non-pipe chars
\| # Pipe
){3} # End group
[^|]*? # Optional non-pipe chars
) # (1 end)
\| # 4th pipe, consume but do not capture
|
( [\S\s]+ ) # (2), Final text less than 4 pipes
答案 2 :(得分:0)
我能想出的最接近的是:
String[] parts = input.split("(?<=\\G(\\w{1,11}\\|){4}+)");
这有两个问题:
输出如下:
userid456|userid457|userid458|userid459|
userid460|userid461|userid462|userid463|
userid464|userid465|userid466|userid467|
userid468|userid469|userid470|userid471|
userid472|userid473|userid474|userid475|
userid476|userid477|userid478|userid479|
userid480|userid481|userid482|userid483