如何在java中的字典中存储字符串的各个部分

时间:2013-05-23 11:39:25

标签: java string dictionary

我想将字符串split-ted分成两部分存入第0和第1位的字典中。 假设值是频率:50则频率将在第0位,50将在字典中位于第1位 以下是相同

的C#代码
data_dictionary = data.Split(',')
  .ToDictionary(item => item.Split(':')[0], item => item.Split(':')[1]);

我想在java中使用相同的解决方案,任何帮助将不胜感激

4 个答案:

答案 0 :(得分:0)

String delimiter = ",";
temp = str.split(delimiter); //str being your "long" string

 for ( int i =0; i < temp.length ; i++ ){
    delimiter = ":";
    temp2 = temp[i].split(delimiter);
    for(int k =0; k < temp2.length ; k++)
        System.out.println(temp2[k]);      //here your code
 } 

将打印:

frequency
50

而且,无论你想用它们做什么,你都会将子串存储在:

temp2[0] = frequency  //just for this example
temp2[1] = 50

您必须在我编写的代码的最后一行中处理它们,因为temp2的值将替换为','分隔的每个子字符串。

答案 1 :(得分:0)

抱歉,没有闭包Java无法接近C#代码的优雅。你可能找到一些使用匿名类来近似的东西,但这不值得。因此,只需将put的内容循环写入HashMap<String, String>。您可以使用String#split(regex)以相同的方式拆分字符串。

答案 2 :(得分:0)

int delim = data.indexOf(':');

System.out.println( data.substring(0,delim) ); //frequency
System.out.println( data.substring(delim+1) );   //50

答案 3 :(得分:0)

如果你想要一些封闭式的东西,那么它可能会有一个函数签名,如:

interface KeyPairFunctor<T, K, V> {
    Pair<K, V> getKeyValuePair(T item);
 }

public static <T, K, V> Map<K, V> toMap(Iterable<T> items, KeyPairFunctor<T, K, V> functor) {
    Map<K, V> m = new HashMap<K,V>();
    for (T item : items) {
        Pair<K, V> e = functor.getKeyValuePair(item);
        m.put(e.getKey(), e.getValue());
    }
    return m;
 }

public static void test() {
    toMap(Arrays.asList(new String[] { "A:B" }), new KeyPairFunctor<String, String, String>() {

        @Override
        public Pair<String, String> getKeyValuePair(String item) {
            String[] ss = item.split(":");
            return new Pair(ss[0], ss[1]);
        }});
}

Pair的实现留给读者一个练习,我相信你可以看到如何将你的,拆分列表放在第一个参数中。