0

私はある文字列を持っています name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13...

等々

これを地図に入れようと思ったのですが、よくわかりません。Multivalued マップを持つ Apache Commons Collection ライブラリを見ています。それを使用しても、この StringArray を解析する方法がわかりません。

編集:

返信ありがとうございます。私の全体的な目標は、その文字列を JSF ドロップダウンに表示することです。私は持っている

<f:selectItems itemValue="#{mainBean.information}" value="#mainBean.information}" />

私のJavaで私が持っている

Private String [] information;
information = config.getStringArray("information"); // This brings in this string from the property file

私はこれを参照してきました http://www.horstmann.com/corejsf/refcard.html

ここにあるもので、投稿したばかりです。その文字列配列のすべての要素を設定します。「名前」だけが表示され、他の 3 つの値が実際の「値」として渡されるようにします。

私は推測する新しい質問をする必要があるかもしれません。

文字列と文字列配列である Map オブジェクトを作成しようとしましたが、JSF はそれを拒否します。

ここに新しい質問があります: JSF selectItems に StringArray を入力する必要がありますが、最初に解析する必要があります

4

3 に答える 3

1

マルチマップに Apache Commons を使用しているため、次の 4 つの値があることがわかっています。

MultiMap map = new MultiHashMap();    
String[] elements = source.split(",");

// process the elements in groups of four
for (int keyIndex = 0; keyIndex < elements.length; keyIndex += 4) {
  String key = elements[keyIndex];
  map.put(key, elements[keyIndex+1]);
  map.put(key, elements[keyIndex+2]);
  map.put(key, elements[keyIndex+3]);
}

最終的にMultiMap、キーごとに 3 つの要素を持つ が得られます。もちろん、データに対していくつかの健全性チェックを行う必要がありますが、基本的な考え方は上記のとおりです。

于 2012-10-16T14:49:29.870 に答える
0

あなたの質問から私が理解できること、これを試してください::

あなたのデータを:

   String data = "name,5486984,189.658.235.215,3.158.68.15,name2,189189,189.658.218.268,3.158.68.13"

// Now you have 

    String[] sections = data.split(",");

セクションには、次のようなデータが含まれます。

セクション[0]="name、5486984,189.658.235.215,3.158.68.15"; セクション[1]="name2,189189,189.658.218.268,3.158.68.13";

于 2012-10-16T14:44:09.180 に答える
0

多値/マルチマップは本当に必要ありません。

amap <String, String[]>で十分だと思います。

まあまだ分割のアイデアで

@Test
public void testIt() {
    final String s = "name,5486984,189.658.235.215,3.158.68.15," +
            "name2,189189,189.658.218.268,3.158.68.13," +
             "name3,5486984,189.658.235.215,3.158.68.15," +
             "name4,189189,189.658.218.268,3.158.68.13";
    final String[] sections = s.split(",(?=[a-zA-Z])");
    final Map<String, String[]> map = new HashMap<String, String[]>();
    String[] tmp;
    for (final String sec : sections) {
        tmp = sec.split(",", 2);
        map.put(tmp[0], tmp[1].split(","));
    }
    //just for output
    for (final String k : map.keySet()) {
        LOG.debug("{} - {}", k, Arrays.toString(map.get(k)));
    }
}

出力:

DEBUG: name3 - [5486984, 189.658.235.215, 3.158.68.15]
DEBUG: name4 - [189189, 189.658.218.268, 3.158.68.13]
DEBUG: name - [5486984, 189.658.235.215, 3.158.68.15]
DEBUG: name2 - [189189, 189.658.218.268, 3.158.68.13]

値としてコレクション/リストが本当に必要な場合は、Arrays.asList(array)役に立ちます。

于 2012-10-16T15:14:15.190 に答える