String.split(“(?< = \\ G ..)”)在windows和android上分裂不同

时间:2015-08-20 12:52:51

标签: java android string

我开始使用android studio和app开发!我有一个java代码可以在我的Windows 8.1 PC上正常工作但是当我将代码复制到我的应用程序时,某个部分无法正常工作......我将向您解释:

我正在使用split命令将String拆分为2个字符。我使用的正则表达式如下:

Text.split("(?<=\\G..)");

在电脑上它完美无缺!例如:

字符串:cef9c2.... - &GT; "ce" + "f9" + "c2" + ".." + ".."

但Android上的调试显示了相同的代码对String的作用:

字符串:cef9c2.... - &GT; "ce" + "f9c2...."

有人可以帮帮我吗?那会很好:)非常感谢

2 个答案:

答案 0 :(得分:1)

Android Regex实现与java&#34;标准&#34;不同。这可能是你问题的原因。

  

Android中使用的正则表达式实现由ICU提供。正则表达式的表示法主要是其他Java语言实现中使用的表示法的超集。这意味着现有应用程序通常会按预期工作,但在极少数情况下,Android可能会接受其他实现不接受的正则表达式。在某些情况下,Android会认识到正则表达式是一个可以更有效地处理的简单特殊情况。对于String中的便捷方法和Pattern中的方法都是如此。

来源:http://developer.android.com/reference/java/util/regex/Pattern.html

我建议你根据上面链接中给出的解释重新考虑你的正则表达式。

答案 1 :(得分:0)

您可以轻松定义一个自己执行此操作的函数,因此确保它也适用于android。

public String[] splitInSubstrings (String str, int len) {
    int siz = (int)Math.ceil((double)str.length() / (double) len);
    String[] res = new String[siz];
    int idx = 0;
    for(int i = 0; i < res.length; i++) {
        int end_idx = ((idx + len) >= str.length()) ? str.length() : (idx + len);
        res[i] = str.substring(idx, end_idx); 
        idx += len;
    }
    return res;
}