регулярное выражение, чтобы разделить строку пополам в Java - PullRequest
4 голосов
/ 15 июля 2010

нам нужна помощь, как написать регулярное выражение для string.split, чтобы мы могли разбить строку пополам.

спасибо.

Ответы [ 2 ]

21 голосов
/ 15 июля 2010

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

Ссылки * * тысяча пятьдесят-одна JLS 15,25 Условный оператор?: JLS 15.17.2 Оператор деления / JLS 15.17.3 Оператор оставшейся части% Похожие вопросы

8 голосов
/ 15 июля 2010

Вам действительно не нужно регулярное выражение для этого. Просто используйте substring().

int midpoint = str.length() / 2;
String firstHalf = str.substring(0, midpoint);
String secondHalf = str.substring(midpoint);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...