【问题标题】:convert ArrayList<String> to String[][]将 ArrayList<String> 转换为 String[][]
【发布时间】:2013-07-24 11:48:01
【问题描述】:

我正在尝试使用以下方式将字符串类型的 Arrayylist 转换为二维数组 String[][]

    ArrayList<String> arrayList = new ArrayList<String>(); 
    arrayList.add("report1");
    arrayList.add("report2");
    arrayList.add("report3");

    String[][] array = new String[arrayList.size()][];
    for (int i = 0; i < arrayList.size(); i++) {
        ArrayList<String> row = arrayList.get(i);
        array[i] = row.toArray(new String[row.size()]);
    }

导致ArrayList<String> row = arrayList.get(i); 出现编译错误

需要建议来解决这个问题,或者有什么其他方法可以解决这个问题

【问题讨论】:

  • 只能得到一个一维的arrayList。你有一个ArrayList&lt;String&gt;,而不是ArrayList&lt;ArrayList&lt;String&gt;&gt;。
  • 您是在尝试将一维列表转换为二维字符串数组吗?
  • 是的,我正在尝试将其转换为二维字符串数组。
  • 也许这可以帮助你stackoverflow.com/questions/2146488/…
  • @Mango:不知道你想要的输出是不可能回答的。

标签: java arrays multidimensional-array arraylist


【解决方案1】:

你只有一个 ArrayList,没有 ArrayList>。前者是一个动态的字符串数组,你可以从中得到String[]。

只需调用

String[] myArray=arrayList.toArray(new String[0]);

无需缩小尺寸,它会自动获取尺寸。

如果您想获得char[][],请执行以下操作:

char[][] chars=new char[arrayList.size()][0]
int i=0;
for(String s:arrayList){
    chars[i]=s.toCharArray();
    i++;
}

请注意,我们在循环中增加了一个计数器。增强的 for 循环没有为我们提供计数器。

【讨论】:

  • 用于二维数组?
  • @MaVRoSCy 不,OP 甚至没有二维数组。它们只有一个字符串数组列表。
  • 将其转换为 String[] 对我没有帮助
  • @Mango 我帮不了你,因为 Java 既不是魔法也不是通灵者。您没有二维数组列表,因此无法将其转换为二维数组。如果你确实有一个二维数组,我需要知道你想如何分割行。
【解决方案2】:
    // TODO Auto-generated method stub
    ArrayList<String> arrayList = new ArrayList<String>(); 
    arrayList.add("report1");
    arrayList.add("report2");
    arrayList.add("report3");
    arrayList.add("report4");
    arrayList.add("report5");
    arrayList.add("report6");
    arrayList.add("report7");
    arrayList.add("report8");
    arrayList.add("report9");

    int rowSize = 3;



    String[][] array = new String[rowSize][];
    int rowIndex=0;

    ArrayList<String> tempList = new ArrayList<String>();
    for (int i = 0; i < arrayList.size(); i++) {

        tempList.add(arrayList.get(i));

        if(i>0 && ((i+1)%(rowSize))==0){

            array[rowIndex++] = tempList.toArray(new String[tempList.size()]);
            tempList = new ArrayList<String>();
        }
    }

    // prints the result array for varification

    for(int i=0;i<array.length;i++){
        System.out.println("\n\nRow : "+i+"\n");
        String[] innerArray = array[i];
        for(int j=0;j<innerArray.length;j++){
            System.out.print(innerArray[j]+" ");
        }
    }

根据需要更改 rowSise 变量值。

【讨论】:

    【解决方案3】:

    arrayList.get(i) 它将返回字符串而不是字符串的数组列表。所以编译器会给出转换错误。

    如果你想实现你的功能,你可以这样做

      String[][] array = new String[arrayList.size()][];
      for (int i = 0; i < arrayList.size(); i++) {
          ArrayList<String> row = new ArrayList<String>();
          row.add(arrayList.get(i));
          array[i] = row.toArray(new String[row.size()]);
      }
    

    【讨论】:

      猜你喜欢
      • 2011-08-20
      • 1970-01-01
      • 2012-08-31
      • 2014-01-09
      • 2014-05-16
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      相关资源
      最近更新 更多