Java 将字符串添加到存储在ArrayList中的字符串ArrayList
我正在尝试从两个不同的网站检索一些数据,并希望将它们存储在不同的ArrayList中以供进一步处理。总之,我有6个字符串ArrayList,然后我有三个ArrayList,我将这些字符串ArrayList添加到其中。我这样做是为了使用循环将数据添加到字符串ArrayList(请参见下面的代码)。然而,它并没有以我期望的方式向字符串ArrayList添加数据,显然我的逻辑是错误的。如果您能给我一点指导,我将不胜感激。下面是我的代码的相关片段:Java 将字符串添加到存储在ArrayList中的字符串ArrayList,java,arraylist,Java,Arraylist,我正在尝试从两个不同的网站检索一些数据,并希望将它们存储在不同的ArrayList中以供进一步处理。总之,我有6个字符串ArrayList,然后我有三个ArrayList,我将这些字符串ArrayList添加到其中。我这样做是为了使用循环将数据添加到字符串ArrayList(请参见下面的代码)。然而,它并没有以我期望的方式向字符串ArrayList添加数据,显然我的逻辑是错误的。如果您能给我一点指导,我将不胜感激。下面是我的代码的相关片段: //creating the String t
//creating the String type ArrayLists
private static ArrayList<String> m1=new ArrayList<String>();
private static ArrayList<String> re1=new ArrayList<String>();
private static ArrayList<String> ra1=new ArrayList<String>();
private static ArrayList<String> m2=new ArrayList<String>();
private static ArrayList<String> re2=new ArrayList<String>();
private static ArrayList<String> ra2=new ArrayList<String>();
//creating three ArrayLists of ArrayLists
private static ArrayList<ArrayList> arraylistM = new ArrayList<ArrayList>();
private static ArrayList<ArrayList> arraylistRe = new ArrayList<ArrayList>();
private static ArrayList<ArrayList> arraylistRa = new ArrayList<ArrayList>();
public static void main(String[] args) throws Exception
{
URL[] item=new URL[2];
item[0] = new URL("http://www.example111111.html");
item[1] = new URL("http://www.example222222.html");
arraylistM.add(m1);
arraylistM.add(m2);
arraylistRe.add(re1);
arraylistRe.add(re2);
arraylistRa.add(ra1);
arraylistRa.add(ra2);
for(int loop=0;loop<2;loop++)
{
BufferedReader in = new BufferedReader(
new InputStreamReader(
item[loop].openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
{
String withoutSpeechMarks=inputLine.replaceAll("\"", "");
String[] parts = withoutSpeechMarks.split("<span x=");
for (int i=0;i<parts.length;i++)
{
if (parts[i].contains("1>"))
{
(arraylistM.get(i)).add(parts[i].substring(13, (parts[i].length())-7));
}//get the first string array in arraylistM and add this data to it
if (parts[i].contains("2>"))
{
(arraylistRe.get(i)).add(parts[i].substring(9, (parts[i].length())-10));
}
if (parts[i].contains("3>"))
{
(arraylistRa.get(i)).add(parts[i].substring(7, (parts[i].length())-7));
}
}//end of inner for loop
} //end of while
in.close();
}
for (int i = 0; i < arraylistM.size(); i++)
{
System.out.println(arraylistM.get(i)+"||"+arraylistRe.get(i)+"||"+arraylistRa.get(i) );
}
//创建字符串类型的ArrayList
私有静态ArrayList m1=新ArrayList();
私有静态ArrayList re1=新ArrayList();
私有静态ArrayList ra1=新ArrayList();
私有静态ArrayList m2=新ArrayList();
私有静态ArrayList re2=新ArrayList();
私有静态ArrayList ra2=新ArrayList();
//创建三个ArrayList的ArrayList
私有静态ArrayList ArrayList=new ArrayList();
私有静态ArrayList ArrayList=新ArrayList();
私有静态ArrayList ArrayList=新ArrayList();
公共静态void main(字符串[]args)引发异常
{
URL[]项=新URL[2];
项[0]=新URL(“http://www.example111111.html");
项目[1]=新URL(“http://www.example222222.html");
arraylistM.add(m1);
arraylistM.add(m2);
arraylistRe.add(re1);
arraylistRe.add(re2);
arraylistRa.add(ra1);
arraylistRa.add(ra2);
对于(int循环=0;循环“))
{
(arraylistRe.get(i)).add(部分[i].子字符串(9,(部分[i].length())-10));
}
if(第[i]部分包含(“3>”)
{
(arraylistRa.get(i)).add(部分[i].子字符串(7,(部分[i].length())-7));
}
}//内循环结束
}//时间结束
in.close();
}
对于(int i=0;i
我希望它是这样的,从第一个网站,提取的结果应该被添加到字符串数组m1,re1,ra1,然后从第二个网站,数据应该被添加到字符串数组m2,re2,ra2。数据被添加到一起,但并没有像我希望的那样分开。从您的描述中,听起来像你应该使用
arrayListM.get(loop).add( ... )
arrayListRe.get(loop).add( ... )
arrayListRa.get(loop).add( ... )
在第一个循环中,而不是
arrayListM.get(i).add( ... )
arrayListRe.get(i).add( ... )
arrayListRa.get(i).add( ... )
ArrayList<ArrayList>
此外,您应该考虑将ARARYLIST的数组列表声明为:
ArrayList<ArrayList<String>>
ArrayList
而不是
arrayListM.get(i).add( ... )
arrayListRe.get(i).add( ... )
arrayListRa.get(i).add( ... )
ArrayList<ArrayList>
ArrayList
在合并两个Arraylist时,您似乎遇到了问题。您可以使用轻松地合并两个Arraylist
ArrayList al1=新的ArrayList();
ArrayList al2=新的ArrayList();
al1.addAll(al2);
它会将第二个arraylist的所有元素添加到第一个arraylist中类型应该使用接口
List arraylist=new arraylist();
@Chris-是的,这是一个很好的一般规则。(当然,它只适用于有适当接口且不需要任何特定于具体类的功能的情况。还值得注意的是,在一些Java实现中——大部分是没有JIT编译器的旧实现——调用接口中的函数会有轻微的性能损失。因此,声明s ArrayList a=new ArrayList();List b=a;,对a的方法调用将比对b的方法调用快一点点。)请不要像这样删除问题的内容。这对那些花时间和精力帮助你的人是不公平的。