0

我有这些字符串数组,我想将它们加载到一个数组数组中以便以后处理它们。

具体来说,这是我的代码:

leerHTMLs(String[] urls) {

 String[][] htmlsArr;

    for (int i = 0; i < urls.length; i++) {

      String [i][] htmlsArr = loadStrings(urls[i]);

    }  

}

我收到一个错误,因为“String htmlsArr[i][] = loadStrings(urls[i]);” 显然不是初始化数组的正确方法,对吗?但是如何将这些一维数组移动到我的多维数组中呢?

除了用一个太大而不能失败的数字初始化多维数组之外,我已经尝试过其他的东西,但这似乎是作弊。

4

1 回答 1

1

好吧,你自己说的!这是一个数组数组!这意味着当你这样做时

htmlsArr[i]

你将从这个数组数组中取回元素 i,当然是一个数组!当你这样做

htmlsArr[i][j]

你得到的是数组中的元素 j,它是名为 htmlsArr 的数组数组中的元素 i!最终代码应如下所示:

void leerHTMLs(String[] urls) {
  String[][] htmlsArr;
  htmlsArr = new String[urls.length][0];
  for (int i = 0; i < urls.length; i++) {
    htmlsArr[i]  = loadStrings(urls[i]);
  }
}

因此,由于 loadStrings() 返回一个字符串数组,因此您告诉处理获取输出并将其放入数组 htmlsArr 的元素 i 中(这当然是一个数组)。

从技术上讲,这不是做这种事情的正确方法,因为说

htmlsArr = new String[urls.length][0];

表示使用 urls.length 个元素创建一个数组,它们都应该是元素个数为 0 的数组。但是然后你用具有任意数量元素的数组的其他数组覆盖数组,特别是 loadStrings 可能给你的。

编辑:

根据 Shane 在评论中的要求,更合适的方法是在其中一个数组(外部或内部)中使用列表。那当然是我自己的拙见,因为由于 Processing(Java) 允许您这样做,您不妨认为它是正确的。问题是,当您说出以下内容时:

String [][] arr = new String[3][4];

你的意思本质上是一个像这样的矩形数组:

{{  "a","b","c","e"  },
 {  "p","y","f","n"  },
 {  "g","q","r","m"  }}

即一个包含三个数组的数组,每个数组包含四个元素。仅出于直觉的原因,我认为这是一种“不正确”的方式。如果你的数组是这样的:

{{  "a","b","c","e","k","h","s"  },
 {  "p","y"  },
 {  "g","q","r","m"  }}

new String[3][something]尽管您始终可以在我的原始答案中使用拉伸,但无法以某种方式直观地定义它。(顺便说一句,您似乎也可以使用这样的空参数来定义它new String[3][]:)

但是由于您要保留数组的第二维未定义,您不妨转向更适合“未知数量元素”工作的列表。由于您似乎无法创建列表数组,因此您必须像这样创建数组列表:

ArrayList<String []> a = new ArrayList<String []>();

如您所见,这里没有元素数量的定义。ArrayLists 可以添加尽可能多的元素,并且可以任意添加和删除元素。所以上面的代码说的是你有一个尚未定义的字符串数组列表。然后,在读取您的网址的 for 循环中,您可以执行以下操作:

a.add(loadStrings(urls[i]));

现在您的 ArrayList 中有一个新的 String 数组元素!

于 2013-09-21T00:21:48.753 回答