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版本有一个巨大的分裂逻辑.
两个功能都不应该相同吗?为什么这是个问题?有什么意见/建议吗?
不要像您那样进行拆分(顺便说一句,这将为每个拆分操作重新编译一个模式),只需这样做;它更简单并且性能更好:
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整体形状进行额外的检查,但这并不难。留作练习;)
| 归档时间: |
|
| 查看次数: |
216 次 |
| 最近记录: |