Разбивая строку и создавая части в массиве

1

У меня есть строка Q, и я хочу разделить ее на несколько частей. Например, я хотел бы иметь (ADD равным 1 и (EXP 1 4) равным 2 и так далее, расщепляясь после каждой круглой скобки, но при этом сохраняя форму строки.

String q =(("(ADD(EXP 1 4)(SQR 1)(DIV 34 77)(MULT 12 5 3 7)(Sub 1 2"));

Я пробовал делать это так, но не имел никакого успеха.

        s[0]=q.indexOf("(");
        s[1]=q.indexOf(")");
  • 0
    indexOf возвращает целое число, поэтому код, который у вас есть, создает массив целых чисел.
  • 0
    Извините только Java, и я хочу, чтобы они были набором небольших строк, возможно, в массиве?
Показать ещё 4 комментария
Теги:
string
arrays
indexof

3 ответа

0

Следующие:

String q ="(ADD(EXP 1 4)(SQR 1)(DIV 34 77)(MULT 12 5 3 7)(Sub 1 2";
String[] result = q.split("(?=\\()");

выдает следующие строки в массиве результатов:

"(ADD"
"(EXP 1 4)"
"(SQR 1)"
"(DIV 34 77)"
"(MULT 12 5 3 7)"
"(Sub 1 2"

но я не совсем уверен, что вы хотите (если это не так, вам нужно уточнить для нас).

Аргумент split - это регулярное выражение. Общепринято использовать его с чем-то вроде "/", который разбивает входную строку символами косой черты. Но выполнение этого не оставляет символов слэша в результате. Чтобы split на строку, но оставить разделители в результатах, вам нужен lookahead. Регулярное выражение выше делает это. (?=<something>) смотрит на какой-то шаблон, но не "потребляет" его; здесь шаблон имеет значение \\( что означает одиночный ( символ, но ему предшествует обратная косая черта, потому что ( обычно имеет специальные значения в регулярном выражении).

  • 0
    Когда я распечатываю результат, он печатает [Ljava.lang.String; @ 15db9742 какие-нибудь идеи?
  • 0
    stackoverflow.com/questions/409784/...
0

Если вы хотите, чтобы все элементы в квадратных скобках были отдельно, вы можете использовать очень простое (и легко читаемое) регулярное выражение с помощью метода split:

String[] array = s.split("[(*|)*|(*)*|)*(*]");

Это даст вам {ADD, EXP 1 4, SQR 1, DIV 34 77, MULT 12 5 3 7, Sub 1 2}.

Если вы хотите сохранить вложенность, это сложнее, и я настоятельно рекомендую вам взглянуть на учебники регулярных выражений, например http://www.regular-expressions.info/tutorial.html.

0
q = q.replaceAll(")","");

String[] splittedString = q.split("(");

Теперь у вас есть массив строк с элементами, как показано ниже.

ДОБАВИТЬ

EXP 1 4

SQR 1

Надеюсь, это то, чего вы ожидали.

  • 0
    Исправленный. Спасибо и извините за ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню