Лучший способ разделить "a {b} c {d}" - PullRequest
0 голосов
/ 06 июня 2018

Я борюсь, кроме метода грубой силы, чтобы разделить

String str = "a{b}c{d}" 

на

String[] arr;
arr[0] = "a"
arr[1] = "{b}"
arr[2] = "c"
arr[3] = "{d}"

Интересно, есть ли более эффективный способ, чем использование indexOf и subString

Ответы [ 5 ]

0 голосов
/ 07 июня 2018

Я не знаю, насколько это эффективно, как предыдущие решения регулярных выражений;Я ставлю один пробел перед {и после}, а затем разделяю строку на "":

    String str = "a{b}c{d}";
    String[] split = str.replace("{"," {").replace("}","} ").split(" ");
    System.out.println(Arrays.toString(split));

Желаемый результат:

    [a, {b}, c, {d}]
0 голосов
/ 07 июня 2018

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

  • непосредственно перед {
  • непосредственно после }

В этом случае вы можете использовать метод split, который поддерживает регулярное выражение (регулярное выражение).Regex предоставляет обходные механизмы, такие как

  • (?=subregex), чтобы увидеть, если мы непосредственно до что-то, что может соответствовать subregex
  • (?<=subregex) чтобы увидеть, если мы непосредственно после что-то, что может быть сопоставлено с subregex

Также { и } считаются метасимволами регулярных выражений (мы можемиспользуйте их как {m,n}, чтобы описать количество повторений, например, a{1,3} может соответствовать a, aa, aaa, но не aaaa или более), поэтому чтобы сделать его обычным литералом, нам нужно экранировать его как \{ и \}

Последнее, что вам нужно, это оператор OR, который представлен как |.

Таким образом, ваш код может выглядеть следующим образом:

String str = "a{b}c{d}";
String[] arr = str.split("(?=\\{)|(?<=\\})"); // split at places before "{" OR after "}"
for (String s : arr){
    System.out.println(s);
}

Выход:

a
{b}
c
{d}

Демо: https://ideone.com/FdUbKs

0 голосов
/ 06 июня 2018

Вы можете использовать метод String.split(String delimiter):

String str = "a {b} c {d}";
String[] arr = str.split(" ");
System.out.println(Arrays.toString(arr));  //  [a, {b], c, {d}]
0 голосов
/ 06 июня 2018

Использование String.split () ...

String[] arr = str.split(" ");

0 голосов
/ 06 июня 2018

просто используйте метод String.split () (документация)

arr = str.split()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...