est ici une classe Maps2
qui fournit une méthode
Map<String, String> mapSequence(String)
Il fournit également deux méthodes surchargées où vous pouvez modifier les délimiteurs utilisés a) entre les touches et les valeurs (par défaut: =
) et b) entre les entrées (par défaut: ,
). Les classes de goyave comme Splitter
et Iterables
sont utilisées en interne pour faire le travail. La carte renvoyée est un LinkedHashMap
, de sorte que l'ordre d'entrée est conservé.
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;
}
}
Code d'essai:
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);
}
Sortie:
{k1 = v1, K2 = v2, k3 =}
Vous voulez analyser une chaîne à une carte? Et s'il vous plaît, ajoutez l'étiquette de goyave –