Преобразовать строку ["Сценарий 1", "Сценарий 2"] в массив - PullRequest
2 голосов
/ 04 апреля 2019

У меня есть следующий код:

String text = "[\"Scenario 1\", \"Scenario 2\"]"

Мне нужно преобразовать "text" в Array.Я знаю, что могу заменить [] ", и я делаю split(","), но есть ли простой способ?

Ответы [ 4 ]

2 голосов
/ 04 апреля 2019

Если вы знаете, что text хорошо отформатирован, вы можете использовать String.substring() вместо регулярного выражения.

String text = "['Stack1', 'Stack2']";
StringTokenizer tkn = new StringTokenizer(text.substring(1, text.length() - 1), ", ");
while (tkn.hasMoreTokens()) {
    String v = tkn.nextToken();
    System.out.println(v.substring(1, v.length() - 1)); // Stack1 Stack2
}
2 голосов
/ 04 апреля 2019

Кажется, вы имеете в виду "[\"String 1\", \"String 2\"]" Конечно, вы можете использовать Джексон ObjectMapper, чтобы прочитать его как строку json и десериализовать в массив.Но это не выглядит так просто.

0 голосов
/ 05 апреля 2019

Я думаю, вы могли бы разделить на ", что даст вам массив с содержанием: [, Scenario 1, ,, Scenario 2, ].

Тогда это простослучай взятия каждого значения с нечетным индексом для нахождения окончательного массива, который является простым математическим вычислением. Я думаю, что это будет довольно эффективно, так как оно требует меньше манипуляций со строками, но я не знаю, будут ли накладные расходы делать больше разбиенийстоило бы.

0 голосов
/ 04 апреля 2019

Самая короткая версия, которую я могу придумать, это:

String text = "['Stack1', 'Stack2']";
String[] splitted = text.split("\\['|', *'|'\\]");

Редактировать: Я просто вижу, что первая запись в массиве будет пустой строкой. Так что, может быть, лучше пойти с решением в одном из комментариев:

String[] splitted2 = text.replaceAll("\\[|\\]|'", "").split(", *");

Кстати, это позволяет разделять элементы запятой + пробел или просто запятой без пробела.

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