我有这些字符串数组,我想将它们加载到数组数组中以便以后处理它们。
具体来说,这是我的代码:
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]);” claearly不是初始化数组的正确方法,对吧?但是如何将这些一维数组移动到我的多维数组?
我已经尝试了其他的事情,除了用一个太大而不能倒数的数字初始化多维数组,但这似乎是在作弊。
答案 0 :(得分: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在评论中的要求,更合适的方法是在其中一个阵列(外部或内部阵列)中使用list。当然,这是我自己的拙见,因为自从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可以尽可能多地添加到它们中,您可以随意添加和删除元素。所以上面的代码说的是你有一个尚未定义的String数组列表。然后,在读取您的网址的for循环中,您可以去:
a.add(loadStrings(urls[i]));
现在你的ArrayList中有一个新的String数组元素!