Страницы

Поиск по вопросам

воскресенье, 7 апреля 2019 г.

Java. String.split(Regex) Парсинг строки

Дается строка, которую нужно распарсить на составные части
String line = "param1 param2 'param3 param3 param3' param4"; String[] params = line.split("Регулярное выражение");
На выходе params должен разбиваться по пробелу и по 'тексту в кавычках': То есть:
param1 param2 param3 param3 param3 param4
Я не могу составить подобное регулярное выражение, прошу помочь. Вот мой вариант, но он не работает так как нужно:
String[] params = line.split("[\\s(^'.'$)]");


Ответ

Еще вариант:
String line = "param1 param2 'param3 param3 param3' param4"; System.out.println(Arrays.asList(line.replaceAll("\'", "").split("'?(\\s|$)(?=(([^']*'){2})*[^']*$)'?"))); // [param1, param2, param3 param3 param3, param4]
С использованием apache-commons-lang
StrTokenizer tokenizer = new StrTokenizer(line, ' ', '\''); while(tokenizer.hasNext()) { System.out.println(tokenizer.nextToken()); } // param1 // param2 // param3 param3 param3 // param4
Последний вариант (честно стырено отсюда):
ArrayList list = new ArrayList(); Matcher m = Pattern.compile("((?<=')[^']*(?='(\\s|$)+)|(?<=\\s|^)[^\\s']*(?=\\s|$))").matcher(line); while ( m.find() ) { list.add(m.group(1)); } System.out.println(list); // [param1, param2, param3 param3 param3, param4]

Комментариев нет:

Отправить комментарий