正则表达式在java中将字符串拆分为一半
我们需要帮助如何为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;
,那么只需定义mid = (s.length() + 1) / 2;
N部分split
您也可以执行以下操作将字符串拆分为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
。
参考
- JLS 15.25条件运算符?:
- JLS 15.17.2分部操作员/
- JLS 15.17.3剩余运算符%
相关问题
- 三元运算符如何工作?
- 为什么(360/24)/ 60 = 0 ...在Java中
你真的不需要正则表达式。 只需使用substring()
。
int midpoint = str.length() / 2; String firstHalf = str.substring(0, midpoint); String secondHalf = str.substring(midpoint);