如何从一行中的几个双引号中获取字符串?

时间:2017-05-01 17:31:24

标签: java regex string

基本上,我需要a b c(单独)

从一行(每个之间有任意数量的空格“

"a" "b" "c"

是否可以使用string.split?

执行此操作

我尝试了从split(".*?\".*?")("\\s*\"\\s*")的所有内容。

后者有效,但它将数据拆分为数组的每个其他索引(1,3,5),其他索引为空“”

修改:

我希望这适用于任何数量/变化的字符,而不仅仅是a,b和c。 (例如:"apple" "pie" "dog boy"

为我的特定问题找到了解决方案(可能效率最低):

Scanner abc = new Scanner(System.in);
for loop
{
      input = abc.nextLine();
      Scanner in= new Scanner(input).useDelimiter("\\s*\"\\s*");
      assign to appropriate index in array using in.next();
      in.next(); to avoid the spaces
}

2 个答案:

答案 0 :(得分:6)

您可以改用模式:

String str = "\"a\" \"b\" \"c\" \"\"";
Pattern pat = Pattern.compile("\"[a-z]+\"");
Matcher mat = pat.matcher(str);

while (mat.find()) {
    System.out.println(mat.group());
}

对于像"a" "b" "c" ""这样的输入,然后是:

<强>输出

"a"
"b"
"c"

如果你想获得没有引号的b c,你可以使用:

String str = "\"a\" \"b\" \"c\" \"\"";
Pattern pat = Pattern.compile("\"([a-z]+)\"");
Matcher mat = pat.matcher(str);

while (mat.find()) {
    System.out.println(mat.group(1));
}

<强>输出

a
b
c

带空格的字符串

如果引号之间可以有空格,则可以使用\"([a-z\\s]+)\"

String str = "\"a\" \"b\" \"c include spaces \" \"\"";
Pattern pat = Pattern.compile("\"([a-z\\s]+)\"");
Matcher mat = pat.matcher(str);

while (mat.find()) {
    System.out.println(mat.group(1));
}

<强>输出

a
b
c include spaces

Ideone

答案 1 :(得分:2)

在分割字符串之前,您需要先进行替换,例如“a”“b”“c”到“a”“b”“c”。 String myLetters[] = myString.replaceAll("\\s*"," ").split(" ")应该分两步完成:

  1. 用一个空格
  2. 替换任何空格\s*
  3. Split根据单个空格
  4. 将字符串分段