用于字符串拆分的正则表达式无法正常工作

时间:2016-03-16 08:16:38

标签: java android regex split

我想将2个字符的字符串拆分而没有任何分隔符,但正则表达式拆分无法正常工作

这是我的代码: -

  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

3 个答案:

答案 0 :(得分:1)

看起来它是Java环境中结果阈值限制的错误。尝试通过明确提供限制来解决它:

    String str="splitstring";
    int partsCount = (str.length() + 1) / 2;
    System.out.println("Split.."+str.trim().split("(?<=\\G.{2})", partsCount).length);
    System.out.println("Split.."+str.trim().split("(?<=\\G.{2})", partsCount)[0]);
    System.out.println("Split.."+str.trim().split("(?<=\\G.{2})", partsCount)[1]);

答案 1 :(得分:0)

我假设您想将字符串分成两个相等的一半,子串..然后这可能会有所帮助!!

System.out.println("Split.."+str.trim().split("(?=\\D)")[0]);

答案 2 :(得分:0)

为什么要使用正则表达式?

您可以这样做:

String str = "splitstring";
System.out.println("String-length: " + str.length());
for (int i = 0; i < str.length(); i += 2) { // Increments of 2
  System.out.print("Split.." + str.charAt(i));
  if (i != str.length() - 1) {
    System.out.print(str.charAt(i + 1));
  }
  System.out.println();
}

输出:

String-length: 11
Split..sp
Split..li
Split..ts
Split..tr
Split..in
Split..g

编辑:如果你坚持使用正则表达式,那么它是:

final String str = "splitstring";
System.out.println(Arrays.toString(
    str.split("(?<=\\G.{2})")
));

输出与上述相同。似乎确实存在一个错误或其他问题,因为正则表达式与您的问题中的相同。但是,不能确定地说,因为它并不是我的专业知识。

编辑2:Jon Skeet has an alternative method that is more efficient than mine above

  

嗯,蛮力很容易做到这一点:

public static List<String> splitEqually(String text, int size) {
    // Give the list the right capacity to start with. You could use an array
    // instead if you wanted.
    List<String> ret = new ArrayList<String>((text.length() + size - 1) / size);

    for (int start = 0; start < text.length(); start += size) {
        ret.add(text.substring(start, Math.min(text.length(), start + size)));
    }
    return ret;
}
     

我认为使用正则表达式非常值得。

     

编辑:我没有使用正则表达式的理由:

     
      
  • 这不使用正则表达式的任何实际模式匹配。它只算数。
  •   
  • 怀疑以上会更有效率,尽管在大多数情况下它都不会重要
  •   
  • 如果您需要在不同的地方使用可变大小,您可能需要重复或辅助函数来构建正则表达式本身   参数 - ick。
  •   
  • 另一个答案中提供的正则表达式首先没有编译(无效转义),然后没有工作。我的代码第一次工作。那&#39; S   更多证明了正则表达式与普通代码的可用性,IMO。
  •