Hier ist eine Klasse Maps2
, die eine Methode
Map<String, String> mapSequence(String)
Es bietet auch zwei überladene Methoden bietet, wo Sie die Trennzeichen ändern können, die a) zwischen Schlüssel und Werte (Standard verwendet: =
) und b) zwischen den Einträgen (Standard: ,
). Guava-Klassen wie Splitter
und Iterables
werden intern verwendet, um die Arbeit zu erledigen. Die zurückgegebene Karte ist eine , daher wird die Reihenfolge beibehalten.
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;
}
}
Prüfregeln:
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);
}
Ausgang:
{k1 = v1, k2 = v2, k3 =}
Sie meinen, zu analysieren ein String zu einer Karte? Und bitte, fügen Sie die Guave-Tag –