在Java中拆分空格上的字符串,引号之间的字符串除外(即将“hello world”视为一个标记)

在Java中拆分空格上的字符串,引号之间的字符串除外(即将“hello world”视为一个标记),java,Java,如何基于空格拆分字符串,但将引用的子字符串作为一个单词 例如: Location "Welcome to india" Bangalore Channai "IT city" Mysore 它应该存储在ArrayList中 Location Welcome to india Bangalore Channai IT city Mysore 以下是方法: String str = "Location \"Welcome to india\" Bangalore " +

如何基于空格拆分
字符串
,但将引用的子字符串作为一个单词

例如:

Location "Welcome  to india" Bangalore Channai "IT city"  Mysore
它应该存储在
ArrayList

Location
Welcome to india
Bangalore
Channai
IT city
Mysore
以下是方法:

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);
正则表达式只是说

  • [^”]
    -以非
  • \S*
    -后跟零个或多个非空格字符
  • ……或者
  • “+?”
    -一个
    -符号,后跟任何符号,直到另一个

位置,“欢迎来到印度”,班加罗尔,香奈伊,“IT城”,Mysore这是我在jsp表单中输入的一个字符串,提交后应该拆分,因为我在问题中提到了双引号不应该在那里,将
m.group(1)
更改为
m.group(1)。替换(“\”,”)
@Tema,关注点与
正交。。。“
分组(可以说是特定于应用程序的)。我强烈建议在处理字符串时使用
String.trim
,而不要使已经复杂的regexp变得更加复杂。遗憾的是,它在内部引号上失败:“exec-s something-e“lala\”lo\“lululu”-f$file”。它也不适用于单引号。如何像bash这样的命令行解释器解析这样的字符串?尽管dupe链接的问题比较老,但aioobe的这个答案是两者中最好的,因为它具有提取匹配项的高级正则表达式。
[Location, "Welcome  to india", Bangalore, Channai, "IT city", Mysore]