一、JAVA String转Set
在进行JAVA String转Map之前,我们可以先介绍一下String转Set的实现方式。
Java的Collections类中,提供了一个静态方法:public static
public static SetstringToSet(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 ListstringToList(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 MapstringToMap(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 MapstringToMap(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 MapstringToMap(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方法。不同的方式有不同的适用范围,可以根据具体的场景需求选择合适的方法。