在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*
- ……或者
-一个“+?”
-符号,后跟任何符号,直到另一个“
”
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]