我想将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
答案 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。