Подтвердить что ты не робот

Разделить строку на пробелы в Java, за исключением того, что между кавычками (например, лечить\ "привет мир \" в качестве одного токена)

Как мне разделить String на основе пробела, но взять подзаголовки под кавычками как одно слово?

Пример:

Location "Welcome  to india" Bangalore Channai "IT city"  Mysore

он должен быть сохранен в ArrayList как

Location
Welcome to india
Bangalore
Channai
IT city
Mysore
4b9b3361

Ответ 1

Вот как:

String str = "Location \"Welcome  to india\" Bangalore " +
             "Channai \"IT city\"  Mysore";

List<String> list = new ArrayList<String>();
Matcher m = Pattern.compile("([^\"]\\S*|\".+?\")\\s*").matcher(str);
while (m.find())
    list.add(m.group(1)); // Add .replace("\"", "") to remove surrounding quotes.


System.out.println(list);

Вывод:

[Location, "Welcome  to india", Bangalore, Channai, "IT city", Mysore]

Регулярное выражение просто говорит

  • [^"]     - токен, начинающийся с чего-то другого, кроме "
  • \S*       - за которым следуют ноль или более непространственных символов
  • ... или...
  • ".+?"   - a " -символ, за которым следует все, до другого ".

Ответ 2

Первый раскол для двойных кавычек:

String s = 'Location "Welcome to india" Bangalore Channai "IT city" Mysore';
String[] splitted = s.split('"');

затем разбивается с помощью пробелов каждая строка в разбитом массиве

for(int i = 0; i< splitted.length; i++){
    //split each splitted cell and store in your arraylist
}