Нет очевидного регулярного выражения, которое бы это делало. возможно возможно сделать с 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 -часть 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
.