Dưới đây là một lớp Maps2
cung cấp một phương pháp
Map<String, String> mapSequence(String)
Nó cũng cung cấp hai phương pháp quá tải, nơi bạn có thể thay đổi delimiters được sử dụng a) giữa các phím và các giá trị (mặc định: =
) và b) giữa các mục (mặc định: ,
). Các lớp ổi như Splitter
và Iterables
được sử dụng nội bộ để thực hiện công việc. Bản đồ được trả lại là LinkedHashMap
, vì vậy, thứ tự nhập được giữ nguyên.
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;
}
}
mã kiểm tra:
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);
}
Output:
{k1 = v1, k2 = v2, k3 =}
Nguồn
2010-11-04 12:53:21
Bạn có nghĩa là để phân tích một chuỗi vào một bản đồ? Và vui lòng thêm thẻ ổi –