代码之家  ›  专栏  ›  技术社区  ›  oshai

google集合中是否有映射拆分器的字符串

  •  6
  • oshai  · 技术社区  · 14 年前

    编辑:

    Map<String,String> myMap = Splitter.on(",").keyValueSeparator("=").split("k1=v1,k2=v2");
    

    编辑: 我开了一个 request

    4 回复  |  直到 14 年前
        1
  •  2
  •   sly7_7    14 年前

    我想番石榴没有这种特色。 如果您可以修改输入字符串的格式,那么(丑陋的)另一个选择可能是这个:

    final String toSplit = "k1=v1" + getProperty("line.separator") + "k2=v2";
    final Properties properties = new Properties();
    properties.load(new ByteArrayInputStream(toSplit.getBytes(Charsets.UTF_8)));
    Maps.fromProperties(properties);
    
        2
  •  5
  •   Sean Patrick Floyd    14 年前

    这是一节课 Maps2

    Map<String, String> mapSequence(String)
    

    它还提供了两个重载方法,您可以在其中更改键和值(默认值: = )和b)条目之间(默认: , ). 番石榴类 Splitter Iterables 是用来做内部工作的。返回的地图是 LinkedHashMap ,因此保留输入顺序。

    public final class Maps2{
    
        public static final String DEFAULT_ENTRY_DELIMITER = ",";
        public static final String DEFAULT_KEYVALUE_DELIMITER = "=";
    
        private Maps2(){}
    
        public static Map<String, String> mapSequence(final String sequence){
            return mapSequence(sequence, DEFAULT_KEYVALUE_DELIMITER);
        }
    
        public static Map<String, String> mapSequence(final String sequence,
            final String keyValueDelim){
            return mapSequence(sequence, keyValueDelim, DEFAULT_ENTRY_DELIMITER);
        }
    
        public static Map<String, String> mapSequence(final String sequence,
            final String keyValueDelim, final String entryDelim){
    
            final Splitter entrySplitter =    Splitter.on(entryDelim)
                                                      .trimResults();
            final Splitter keyValueSplitter = Splitter.on(keyValueDelim)
                                                      .trimResults();
            final Map<String, String> map = Maps.newLinkedHashMap();
            for(final String token : entrySplitter.split(sequence)){
                final String[] items =
                    Iterables.newArray(
                        keyValueSplitter.split(token), String.class);
                if(items.length != 2){
                    throw new IllegalArgumentException(
                       "Map String not well-formed");
                }
                map.put(items[0], items[1]);
            }
            return map;
        }
    
    }
    

    测试代码:

    public static void main(final String[] args){
        // note the randomly spread whitespace in the test code,
        // also the last entry has no value.
        // using Splitter().trimResults() we can handle junk like that
        final Map<String, String> map = Maps2.mapSequence("k1=v1 ,k2=v2, k3 =");
        System.out.println(map);
    }
    

    输出:

    {k1=v1,k2=v2,k3=}

        3
  •  1
  •   Peter Knego    14 年前

    // assumes that input is properly formed e.g. "k1=v1,k2=v2"
    public Map<String, String> toMap(String input) {
        Map<String, String> map = new HashMap<String, String>();
        String[] array = input.split(",");
        for (String str : array) {
            String[] pair = str.split("=");
            map.put(pair[0], pair[1]);
        }
        return map;
    }
    
        4
  •  1
  •   dogbane    14 年前

    不是在番石榴。

    但是 StringToMap 可以为你做这个。

    推荐文章