如何按空格分割字符串但转义引号内的空格(在java中)?

我有一个像这样的字符串:

"Video or movie" "parent" "Media or entertainment" "1" "1" "1" "0" "0" 

我想用空格拆分它,但引号内的空格应该被忽略。 所以分裂的字符串应该是:

 "Video or movie" "parent" "Media or entertainment" "1" ... 

语言是java。

这应该为你做的工作:

  final String s = "\"Video or movie\" \"parent\" \"Media or entertainment\" \"1\" \"1\" \"1\" \"0\" \"0\""; final String[] t = s.split("(?<=\") *(?=\")"); for (final String x : t) { System.out.println(x); } 

输出:

 "Video or movie" "parent" "Media or entertainment" "1" "1" "1" "0" "0" 

您可以使用:

 Patter pt = Pattern.compile("(\"[^\"]*\")"); 

请记住,这也捕获"" (空字符串)。

测试:

 String text="\"Video or movie\" \"parent\" \"Media or entertainment\" \"1\" \"1\" \"1\" \"0\" \"0\""; Matcher m = Pattern.compile("(\"[^\"]*\")").matcher(text); while(m.find()) System.out.printf("Macthed: [%s]%n", m.group(1)); 

OUTPUT:

 Macthed: ["Video or movie"] Macthed: ["parent"] Macthed: ["Media or entertainment"] Macthed: ["1"] Macthed: ["1"] Macthed: ["1"] Macthed: ["0"] Macthed: ["0"] 

看看这个问题。 您可以调整其解决方案以忽略引号中的空格而不是逗号。

Java:拆分以逗号分隔的字符串,但忽略引号中的逗号

而不是拆分,只需匹配不是空间的东西。

 Pattern p = Pattern.compile("\"(?:[^\"\\\\]|\\\\.)*\"|\\S+"); Matcher m = p.matcher(inputString); while (m.find()) { System.out.println(m.group(0)); } 

“[] +”拆分? (包括引号)

如果它们不在字符串的开头或结尾,你可能需要添加缺失的“s”。