繁体   English   中英

在复杂的定界符上有条件地分割字符串

[英]Conditionally splitting a string on a complex delimiter

我有以下字符串:

1,2,3 | 5,4,5 | 8

我想要这样的输出:

1,2,3 | 5
4,5 | 8

如何使用Java实现此目的?
我的意思是用","分割,但只有在"|"

添加正向后视条件,例如:

"1,2,3|5,4,5|8".split("(?<=\\|\\d{1,10}),"))

后向条件(?<=\\\\|\\\\d{1,10})表示: | 后跟最多10位数字(因为回溯要求定义了最大长度,因此不能使用无界重复修饰符+* )。

一种方法是使用后向:

for (String s : "1,2,3|5,4,5|8".split("(?<=\\|\\d{1,20}),")) {
    System.out.println(s);
}

以上印刷品

1,2,3|5
4,5|8

请注意,Java正则表达式有一个限制,即环视必须具有明显的上限。 因此,您需要使用\\\\d{1,20}代替更自然的\\\\d+

演示

你可以做:

split("(?<=\\|[0-9]),")

这里:

  • (?<=\\\\|[0-9])
    • ?<=表示正向后方。
    • \\\\|[0-9]表示有一个| 和前一个数字的,
  • ,匹配,

如果只需要输出,

final String[] p = x.split(",");

for (int i=0; i<p.length; i++) {
    if (i>0 && p[i-1].contains("|"))
        System.out.print("\n");
    else
        System.out.print(",");
    System.out.print(p[i]);
}
//if (p.length>0)   
    System.out.print("\n");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM