Guava MapSplitter用于提取其值可包含外部拆分字符的键值对

时间:2015-04-02 15:47:27

标签: regex guava

使用Guava库,如果我想从字符串中提取键值对(样本在下面)

id=1234 name="Amy Winehouse" age=27

,其中

  • 键的值可以包含外部拆分字符,即。 名称键的值 Amy Winehouse 在示例中包含空格字符。
  • 包含外部拆分字符的值包含另一个字符, 双引号 包含示例中 name 键的值

如何创建这样的MapSplitter

1 个答案:

答案 0 :(得分:1)

这样可以解决问题:

    String input = "id=1234 name=Amy fullname=\"Amy Winehouse\" age=27";

    Map<String, String> result = Splitter.onPattern("\\s(?=([^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)")
            .withKeyValueSeparator(Splitter.onPattern("="))
            .split(input);

输出:

{id=1234, name=Amy, fullname="Amy Winehouse", age=27}