我们需要帮助来编写 string.split 的正则表达式,以便我们可以将字符串分成两半。
谢谢。
最佳答案
没有明显的正则表达式模式可以做到这一点。 可能可以用 String.split
做到这一点,但我只是像这样使用 substring
:
String s = "12345678abcdefgh";
final int mid = s.length() / 2;
String[] parts = {
s.substring(0, mid),
s.substring(mid),
};
System.out.println(Arrays.toString(parts));
// "[12345678, abcdefgh]"
上面的代码会将奇数长度的 String
拆分为 part[1]
比 part[0]
长一个字符。如果您需要相反的方式,则只需定义 mid = (s.length() + 1)/2;
N-部分拆分
您也可以像这样将字符串拆分为 N 部分:
static String[] splitN(String s, final int N) {
final int base = s.length() / N;
final int remainder = s.length() % N;
String[] parts = new String[N];
for (int i = 0; i < N; i++) {
int length = base + (i < remainder ? 1 : 0);
parts[i] = s.substring(0, length);
s = s.substring(length);
}
return parts;
}
然后你可以这样做:
String s = "123456789";
System.out.println(Arrays.toString(splitN(s, 2)));
// "[12345, 6789]"
System.out.println(Arrays.toString(splitN(s, 3)));
// "[123, 456, 789]"
System.out.println(Arrays.toString(splitN(s, 5)));
// "[12, 34, 56, 78, 9]"
System.out.println(Arrays.toString(splitN(s, 10)));
// "[1, 2, 3, 4, 5, 6, 7, 8, 9, ]"
请注意,这有利于前面的部分容纳额外的字符,并且当部分的数量多于字符的数量时它也适用。
附录
在上面的代码中:
?:
是条件运算符,也就是三元运算符。/
执行整数除法。1/2 == 0
。%
执行整数取余运算。3 % 2 == 1
。此外,-1 % 2 == -1
。
引用资料
相关问题
关于java - 正则表达式在java中将字符串分成两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3250143/