Разделить строку на пробелы в Java, за исключением того, что между кавычками (например, лечить\ "привет мир \" в качестве одного токена)
Как мне разделить String
на основе пробела, но взять подзаголовки под кавычками как одно слово?
Пример:
Location "Welcome to india" Bangalore Channai "IT city" Mysore
он должен быть сохранен в ArrayList
как
Location
Welcome to india
Bangalore
Channai
IT city
Mysore
Ответы
Ответ 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
}