0

ArrayListnamedのインスタンスがありますarray。一部の JSON データを解析すると、すべてが に格納されarrayます。a を実行するSystem.out.println(array);と、項目の長いリスト (約 30 個) がリストされますが、書き込むSystem.out.println(array.size);と値が 1 になります。

リストに少なくとも 30 個の値が含まれているのに、値が 1 しか返されないのはなぜですか?

これのための私のコード:

public void setLocationName (String name) {
    array = new ArrayList<String>();
    array.add(name);
    System.out.println(array); //This return a long list
    System.out.println(array.size()); //But this only return the value 1
}

public String[] getLocationName() {
    String tArray[] = null;
    for (int i = 0; i < array.size(); i++){
      System.out.println(i);
      tArray = array.toArray(new String[i]);    
    }       
    return tArray;
}

}

長いリスト:

[Brunnsparken, Göteborg]
[Brunnsgatan, Göteborg]
[Brunnslyckan, Lerum]
[Brunnsbotorget, Göteborg]
[Brunnsnäs, Ulricehamn]
[Brunnshult, Mellerud]
[Brunnsdal, Skövde]
[Brunns skola, Ulricehamn]
[Brunnsgården, Kungälv]
[Brunns kyrka, Ulricehamn]
[Boråsparken, Borås]
[Stadsparken, Ulricehamn]
[Lysekilsparken, Lysekil]
[Mössebergsparken, Falköping]
[Dalaborgsparken, Vänersborg]
[Rösparken, Åmål]
[Lillhagsparken Norra, Göteborg]
[Lillhagsparken Södra, Göteborg]
[Sylte Ryrbäcksparken, Trollhättan]
[Skogstomtsparken, Borås]
[Svinesundsparken, Norge]
[Håjumsparken, Trollhättan]
[Eriksdalsparken, Bollebygd]
[Fridhemsparken, Lidköping]

私の結果は、リストから 1 つの項目のみが返されるということですが、tArrayリスト全体を返したいと思います。

これを解決するには?

4

3 に答える 3

4

Javaは理解できずJson、基本的にあなたがしているのは配列に文字列を追加することです

this.array.add(name);---> 配列に 1 つの値を追加するため、サイズは 1 つだけです

Json特定のライブラリを使用して、データを解析して Java 配列リストにする必要がある場合があります。

よろしく

于 2013-03-27T15:16:06.500 に答える
0
public void setLocationName (String name) {
    array = new ArrayList<String>();
    array.add(name);
    System.out.println(array); //This return a long list
    System.out.println(array.size()); //But this only return the value 1
}

ArrayListこのメソッドを呼び出すたびに、新しいものを作成しています:

array = new ArrayList<String>();

上記の行を削除することもできますが、メソッドの名前を変更することをお勧めします。これはもはやセッターではなく、実際にはこのメソッドを呼び出すたびに既存のリストに追加しているためです。

あなたがしたいことは、おそらくforeachループを使用してセッターに解析する前にリストを構築し(どのようなオブジェクトを扱っているのかわかりません)、セッター(setLocationName)を単純化して収容することです。

したがって、次のようになります。

public void setLocationName(ArrayList<String> names)
    {
        this.array = names;
        System.out.println(array); //This return a long list
        System.out.println(array.size()); //But this only return the value 1
    }
于 2013-03-27T15:34:03.253 に答える
0

Stringをペアに解析する必要があるようです。

データを格納するのに最も適切な構造のように見えMapます-値の最初の部分は一意であると思います。

正規表現は、おそらくデータを解析するための最良の方法です。

public static void main(String[] args) {

    final String data = "[Brunnsparken, Göteborg]\n"
            + "[Brunnsgatan, Göteborg]\n"
            + "[Brunnslyckan, Lerum]\n"
            + "[Brunnsbotorget, Göteborg]\n"
            + "[Brunnsnäs, Ulricehamn]\n"
            + "[Brunnshult, Mellerud]\n"
            + "[Brunnsdal, Skövde]\n"
            + "[Brunns skola, Ulricehamn]\n"
            + "[Brunnsgården, Kungälv]\n"
            + "[Brunns kyrka, Ulricehamn]\n"
            + "[Boråsparken, Borås]\n"
            + "[Stadsparken, Ulricehamn]\n"
            + "[Lysekilsparken, Lysekil]\n"
            + "[Mössebergsparken, Falköping]\n"
            + "[Dalaborgsparken, Vänersborg]\n"
            + "[Rösparken, Åmål]\n"
            + "[Lillhagsparken Norra, Göteborg]\n"
            + "[Lillhagsparken Södra, Göteborg]\n"
            + "[Sylte Ryrbäcksparken, Trollhättan]\n"
            + "[Skogstomtsparken, Borås]\n"
            + "[Svinesundsparken, Norge]\n"
            + "[Håjumsparken, Trollhättan]\n"
            + "[Eriksdalsparken, Bollebygd]\n"
            + "[Fridhemsparken, Lidköping]";
    final Pattern pattern = Pattern.compile("\\[([^,]++),\\s++([^\\]]++)\\]");
    final Matcher matcher = pattern.matcher(data);
    final Map<String, String> items = new TreeMap<>();
    while (matcher.find()) {
        items.put(matcher.group(1), matcher.group(2));
    }
    for (final Entry<String, String> entry : items.entrySet()) {
        System.out.println(entry);
    }
}

これからの出力:

Boråsparken=Borås
Brunns kyrka=Ulricehamn
Brunns skola=Ulricehamn
Brunnsbotorget=Göteborg
Brunnsdal=Skövde
Brunnsgatan=Göteborg
Brunnsgården=Kungälv
Brunnshult=Mellerud
Brunnslyckan=Lerum
Brunnsnäs=Ulricehamn
Brunnsparken=Göteborg
Dalaborgsparken=Vänersborg
Eriksdalsparken=Bollebygd
Fridhemsparken=Lidköping
Håjumsparken=Trollhättan
Lillhagsparken Norra=Göteborg
Lillhagsparken Södra=Göteborg
Lysekilsparken=Lysekil
Mössebergsparken=Falköping
Rösparken=Åmål
Skogstomtsparken=Borås
Stadsparken=Ulricehamn
Svinesundsparken=Norge
Sylte Ryrbäcksparken=Trollhättan

Map(上記のように) ループするか、 by キーから値を取得することで、アイテムにアクセスできます。TreeMap私が使用した はデータをキーでソートします。また、 を使用してデータを挿入順に保存することもできますLinkedHashMap

Listタプルのような構造にアイテムを格納することもできます。

于 2013-03-27T15:38:00.863 に答える