Разбить строку на пробелы, но не в том случае, если пробел находится внутри кавычек (часть в кавычках может выглядеть как ххх "х х х" ххх - PullRequest
0 голосов
/ 04 мая 2018

Input

abc hello" I am batman"xoxo bat man

Выход

  • а
  • привет я batmanxoxo (убрать цитаты)
  • летучая мышь
  • человек

Я использую \"(.*?)\", чтобы получить содержимое внутри кавычек, но не могу получить оставшуюся часть, не являющуюся пробелом.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вы можете разбить строку, используя ". Как

String s= "abc hello\" I am batman\"xoxo bat man";
String[] splittedString = s.split("\"");

splittedString будет "abc hello", "я - бэтмен", "xoxo bat man". И использовать только нечетный индекс из splittedString.

List<String> result = new ArrayList<String>();
for(int i = 0; i < splittedString.lengt; i++){
  if (i % 2 == 0) {
    result.addAll(Arrays.asList(splittedString[i].split(" ")));
  } else {
    result.add(splittedString[i]);
  }
}
0 голосов
/ 04 мая 2018

Вы можете сделать это, используя шаблон mathing, а затем удалить ":

  • pattern (?:"[^"]*"|\S)+: группа без захвата, которая будет
    • если найти, то " будет ждать (взять все символы без кавычек [^"]) второй " для поиска пробела
    • если найдете букву, возьмите все непробельные символы (\ S)
  • заменить " но пустую строку

String str = "abc hello\" I am batman\"xoxo bat man";
Matcher m = Pattern.compile("(?:\"[^\"]*\"|\\S)+").matcher(str);
List<String> res = new ArrayList<>();
while (m.find())
    res.add(m.group().replaceAll("\"", ""));

System.out.println(res);       //[abc, hello I am batmanxoxo, bat, man]
...