2

Java で配列リストを使用しているときに遭遇すると、小さな問題が発生します。基本的に、配列をarraylistに格納したいと考えています。配列リストがオブジェクトを保持できることは知っているので、可能であるはずですが、方法がわかりません。

ほとんどの場合、(ファイルから解析された) 私の arraylist は文字列として 1 つの文字を保持しているだけですが、たまに次のような一連の文字が含まれています。

    myarray
0    a
1    a
2    d
3    g
4    d
5    f,s,t
6    r

ほとんどの場合、位置 5 にある文字列で気にする唯一の文字は f ですが、場合によっては s または t も確認する必要があります。これに対する私の解決策は、次のような配列を作成することです。

      subarray
0     f 
1     s
2     t

代わりに部分配列を位置 5 に格納します。

    myarray
0    a
1    a
2    d
3    g
4    d
5    subarray[f,s,t]
6    r

私はこのコードでこれをやろうとしました:

 //for the length of the arraylist
 for(int al = 0; al < myarray.size(); al++){
      //check the size of the string
      String value = myarray.get(al);
      int strsz = value.length();
      prse = value.split(dlmcma);
      //if it is bigger than 1 then use a subarray
      if(strsz > 1){
          subarray[0] = prse[0];
          subarray[1] = prse[1];
          subarray[2] = prse[2];
      }
      //set subarray to the location of the string that was too long
      //this is where it all goes horribly wrong
      alt4.set(al, subarray[]);
  }

しかし、これは私が望むようには機能していません。.set(int, array) は許可されません。.set(int, string) のみを許可します。誰にも提案はありますか?

4

5 に答える 5

2

最も簡単な方法は、ArrayList の ArrayList を使用することです。

ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>();

ただし、これはおそらく最善の解決策ではありません。データ モデルを再考し、より良い解決策を探すことをお勧めします。

于 2012-10-17T21:05:32.250 に答える
0

これはあなたが手に入れたいものかもしれません

public class Tester {

    List<String> myArrays = Arrays.asList(new String[] { "a", "a", "d", "g", "d", "f,s,t", "r" });

    ArrayList<ArrayList<String>> alt4 = new ArrayList<ArrayList<String>>();

    private void manageArray() {
        // for the length of the arraylist
        ArrayList<String> subarray = new ArrayList<String>();
        for(int al = 0; al < myArrays.size(); al++) {
            // check the size of the string
            String value = myArrays.get(al);
            int strsz = value.length();
            String prse[] = value.split(",");
            // if it is bigger than 1 then use a subarray
            if(strsz > 1) {
                for(String string : prse) {
                    subarray.add(string);
                }
            }
            // set subarray to the location of the string that was too long
            // this is where it all goes horribly wrong
            alt4.set(al, subarray);
        }

    }
}
于 2012-10-17T21:25:06.190 に答える
0

次のように切り替えることができます。

List<List<Character>> alt4 = new ArrayList<List<Character>>();  
于 2012-10-17T21:08:55.660 に答える
0

に変更alt4.set(al, subarray[]);するだけ

         alt4.add(subarray);

alt4私は別の定義されていると仮定しArrayList<String[]>ます。そうでない場合は、次のように定義します。

        List<String[]> alt4= new ArrayList<String[]>();

また

        ArrayList<String[]> alt4= new ArrayList<String[]>();
于 2012-10-17T21:05:46.140 に答える
0

私の推測では、alt4 を次List<String>のように宣言しているため、文字列の配列をリスト要素として設定できません。リストList<String[]>に追加する前に、String[] 配列の 0 番目の要素として設定するだけです。

于 2012-10-17T21:07:05.760 に答える