拆分字符串在Java中工作,在Android上不起作用

iZB*_*sit 5 java regex string android

所以我有这个逻辑,每个字符串分割4个字符.像这样的东西

0108011305080508000000 gives 0108 0113 0508 0508 0000 00
Run Code Online (Sandbox Code Playgroud)

我使用的逻辑是

String [] splitErrorCode = inputString.split("(?<=\\G....)");
Run Code Online (Sandbox Code Playgroud)

它在Java中运行良好,但是当我在Android中运行时,我得到了错误的输出.

0108 011305080508000000

我不知道出了什么问题.经过String的split函数后,我意识到Android使用的fastSplit地方,因为Java版本有一个巨大的分裂逻辑.

两个功能都不应该相同吗?为什么这是个问题?有什么意见/建议吗?

fge*_*fge 3

不要像您那样进行拆分(顺便说一句,这将为每个拆分操作重新编译一个模式),只需这样做;它更简单并且性能更好:

private static final Pattern ONE_TO_FOUR_DIGITS = Pattern.compile("\\d{1,4}");

// ...

public List<String> splitErrorCodes(final String input)
{
    final List<String> ret = new ArrayList<>(input.length() / 4 + 1);
    final Matcher m = ONE_TO_FOUR_DIGITS.matcher(input);

    while (m.find())
        ret.add(m.group());

    return ret;
}
Run Code Online (Sandbox Code Playgroud)

当然,需要对input整体形状进行额外的检查,但这并不难。留作练习;)