您的位置:

JAVA使用String转Map的详细方法

一、JAVA String转Set

在进行JAVA String转Map之前,我们可以先介绍一下String转Set的实现方式。

Java的Collections类中,提供了一个静态方法:public static Set emptySet(),用于返回一个不可修改的空Set。通过这个方法,我们可以将一个String类型的数据,通过先把String转化为数组,再将数组放入Set集合中。示例代码如下:

public static Set stringToSet(String inputStr, String separator) {
    if (StringUtils.isBlank(inputStr)) {
        return Collections.emptySet();
    }
    String[] split = StringUtils.split(inputStr, separator);
    return Sets.newHashSet(split);
}

  

这样,我们就可以将一个以分隔符隔开的String值,通过上述代码方法转成Set了。

二、JAVA String转List

与Set类似,我们也可以先把String类型的数据转化为数组,再通过Arrays的asList()方法将数组转化为List。示例代码如下:

public static List stringToList(String inputStr, String separator) {
    if (StringUtils.isBlank(inputStr)) {
        return Collections.emptyList();
    }
    String[] split = StringUtils.split(inputStr, separator);
    return Arrays.asList(split);
}

  

通过上述代码方法,我们可以将一个以分隔符隔开的String值,转化为List了。

三、JAVA String转Date

在进行Java String转Map的过程中,有时我们需要将String类型的时间格式转换为Date类型。这时,我们可以使用SimpleDateFormat类中的parse()方法,将String转成Date对象。示例代码如下:

public static Date stringToDate(String inputStr, String pattern) throws ParseException {
    if (StringUtils.isBlank(inputStr)) {
        return null;
    }
    SimpleDateFormat sdf = new SimpleDateFormat(pattern);
    return sdf.parse(inputStr);
}

上述代码中,pattern表示时间格式,例如“yyyy-MM-dd HH:mm:ss”。这样,我们就可以将一个指定格式的时间类型的String值,通过上述代码方法转成Date了。

四、JAVA String转Map

现在来看最重要的Java String转Map过程。我们接下来介绍3种不同的方式,分别是利用自带的Map的方法,利用BeanUtils的方法,利用Json的方式。

1. Java String转Map方法一

我们可以利用JAVA自带的Map中的put()方法将键值对一个个添加到Map中。如下:

public static Map stringToMap(String inputStr, String itemSeparator, String kvSeparator) {
    if (StringUtils.isBlank(inputStr)) {
        return Collections.emptyMap();
    }
    Map
    map = Maps.newLinkedHashMap();
    String[] items = StringUtils.split(inputStr, itemSeparator);
    for (String item : items) {
        String[] kvs = StringUtils.split(item, kvSeparator);
        if (kvs.length == 2) {
            map.put(kvs[0], kvs[1]);
        }
    }
    return map;
}

   
  

代码中,itemSeparator为分隔符,kvSeparator为键值对之间的分隔符,我们使用的是Guava中的Maps.newLinkedHashMap()方法来创建一个LinkedHashMap,因为LinkedHashMap可以保证顺序,并且可以放入null键和null值。

2. Java String转Map方法二

我们也可以通过BeanUtils的populate()方法来将inputStr中的键值对自动封装成Bean对象,再通过BeanUtils的describe()方法把对象的键值对转成一个map。示例如下:

public static Map stringToMap(String inputStr, String itemSeparator, String kvSeparator) throws Exception {
    if (StringUtils.isBlank(inputStr)) {
        return Collections.emptyMap();
    }
    MyBean bean = new MyBean();
    String[] items = StringUtils.split(inputStr, itemSeparator);
    for (String item : items) {
        String[] kvs = StringUtils.split(item, kvSeparator);
        if (kvs.length == 2) {
            BeanUtils.setProperty(bean, kvs[0], kvs[1]);
        }
    }
    return BeanUtils.describe(bean);
}

  

示例代码中,MyBean是一个普通的JavaBean对象。这种方式主要是适用于字符串中包含的键值对比较简单,且对象的属性名称跟键名称一致时使用。

3. Java String转Map方法三

我们还可以通过JSON将字符串转成Map。这种方式更加简便,直接调用Jackson的ObjectMapper对象即可。示例如下:

public static Map stringToMap(String inputStr) {
    if (StringUtils.isBlank(inputStr)) {
        return Collections.emptyMap();
    }
    ObjectMapper om = new ObjectMapper();
    Map
    map = Maps.newLinkedHashMap();
    try {
        map = om.readValue(inputStr, LinkedHashMap.class);
    } catch (Exception e) {
        // log error
    }
    return map;
}

   
  

上述代码中,我们使用了LinkedHashMap来保证顺序。这种方式对于字符串中包含的键值对比较复杂时,使用效果更佳,但对于性能方面需要注意。

五、总结

以上就是Java中使用String转Map的方法。我们首先介绍了String转Set和String转List的实现方法,然后分别展示了3种不同方式的String转Map方法。不同的方式有不同的适用范围,可以根据具体的场景需求选择合适的方法。