我有String s = "#stack###over##flow".
如何将s
拆分为
String[] a = {"#", "stack", "###", "over", "##", "flow}
我在How to split a string, but also keep the delimiters?中尝试了s.split("(?<=#)|(?=#)")
,但它提供了
String[] a = {"#", "stack", "#", "#", "#", "over", "#", "#", "flow}
答案 0 :(得分:5)
外观需要更加自信,这意味着后面需要断言以下位置是单词字符或不是#
,并且前瞻需要断言前面的位置是也可以是单词字符,也可以是#
。
您可以在每次轮换中使用word boundaries:
String s = "#stack###over##flow";
String[] a = s.split("(?<=#\\b)|(?=\\b#)");
System.out.println(Arrays.toString(a)); //=> [#, stack, ###, over, ##, flow]
或修改您的外观断言(更长的方法):
String[] a = s.split("(?<=#(?!#))|(?<=[^#](?=#))");
答案 1 :(得分:2)