Here is the Maps2 class that provides the method
Map<String, String> mapSequence(String)
It also provides two overloaded methods in which you can change the delimiters that are used a) between keys and values ββ(default: = ) and b) between records (default:,). Guava classes such as Splitter and Iterables are used internally to do the job. The returned display is LinkedHashMap , so the recording order is preserved.
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; } }
Test code:
public static void main(final String[] args){
Output:
{k1 = v1, k2 = v2, k3 =}
Sean Patrick Floyd
source share