【发布时间】:2016-03-16 08:16:37
【问题描述】:
我想将一个字符串拆分为 2 个字符,不带任何分隔符,但 Regex 拆分无法正常工作
这是我的代码:-
String str="splitstring";
System.out.println("Split.."+str.trim().split("(?<=\\G.{2})").length);
System.out.println("Split.."+str.trim().split("(?<=\\G.{2})")[0]);
System.out.println("Split.."+str.trim().split("(?<=\\G.{2})")[1]);
输出:-
Split..2
Split..sp
Split..litstring
【问题讨论】:
-
你的预期输出是什么?
-
我的预期输出是具有 2 个字符的拆分字符串数组,并且在每个位置 2 个字符可用 like.on 位置 0 它将返回“sp”而不是位置 1 返回“li”而不是 2 位置“ ts" 直到字符串结尾
-
这一定是 ICU 正则表达式库中的故障。
-
@WiktorStribiżew 我认为这是一个错误确实是正确的,因为以下
System.out.println(Arrays.toString(str.split("(?<=\\G.{2})")));给出了预期的行为.. -
@KevinCruijssen:我开始认为lookbehind 中的
\G行为是未定义的。这是PHP demo ([0] => sp, [1] => lit, [2] => str, [3] => ing, [4] =>)、C# demo(与 Java 输出相同)、Ruby demo(与 Java 输出相同)。 R (that also uses a PCRE engine!) example works as in Java, too.