2013-12-18 42 views
0

我在java中使用arraylist。 我已经写了下面的代码:如何以所需格式打印数组列表?

public void myfunction() { 
    cmdMessage="str1 : root;str2 : cisco123,12345,2345;str1 : root234;str2 : cccccc"; 

    String[] splitMessage = cmdMessage.split(";"); 
    System.out.println("string length is \n" + splitMessage.length); 
    ArrayList<String> mylist = new ArrayList<>(); 
    ArrayList<ArrayList> finalresult = new ArrayList<>(); 

    for (int i= 0; i<= splitMessage.length-1;i++){ 

     if(splitMessage[i]!=null){ 
     if (splitMessage[i].contains("str1")){ 
      System.out.println("splitted string is "+ (splitMessage[i]).split(":")[1].trim()); 
      mylist.add(((splitMessage[i]).split(":")[1]).trim()); 
     } 
     if (splitMessage[i].contains("str2")){ 
      System.out.println("str2 length is ..." + splitMessage[i].length()); 
      System.out.println("splitted str2 string is "+ (splitMessage[i]).split(":")[1].trim()); 
      mylist.add(((splitMessage[i]).split(":")[1]).trim()); 
     } 
     } 
     finalresult.add(mylist); 
    } 
} 

而这个Java函数给出结果为:

[[root, cisco123,12345,2345, root234, cccccc],[root, cisco123,12345,2345, root234, cccccc]] 

,但我想造成这样的:

[[root, cisco123,12345,2345], [root234, cccccc]] 

我想我的地方失踪declaration/initialization绝招。

我该如何得到这个结果?

+0

请在未来更有效地格式化你的代码 - 这真的很难在读那一刻,随着各处的缩进。 –

+0

所以你想查看不同格式的ArrayList的内容? @vishwas – MaheshVarma

回答

2

尝试将mylist的初始化移动到for循环中。

0

这里发生了什么事情,无论循环的哪个迭代正在执行,元素被添加到相同的列表mylist。在每次迭代结束时,将'mylist'添加到finalresult。也就是说,在这种情况下,将相同列表的两个副本添加到finalresult

为了克服这个问题,您必须在for循环的每次迭代开始时创建新列表,并将元素添加到该列表中。在每次迭代结束时,将新创建的列表添加到finalresult

for (int i= 0; i<= splitMessage.length-1;i++){ 
    ArrayList<String> mylist = new ArrayList<>(); 

    // do something with strings... 
    // ... 

    finalresult.add(mylist); 
} 
0
for (int i= 0; i<= splitMessage.length-1;i++){ 

     if(splitMessage[i]!=null){ 
     if (splitMessage[i].contains("str1")){ 
      System.out.println("splitted string is "+ (splitMessage[i]).split(":")[1].trim()); 
      mylist.add(((splitMessage[i]).split(":")[1]).trim()); 
     } 
     if (splitMessage[i].contains("str2")){ 
      System.out.println("str2 length is ..." + splitMessage[i].length()); 
      System.out.println("splitted str2 string is "+ (splitMessage[i]).split(":")[1].trim()); 
      mylist.add(((splitMessage[i]).split(":")[1]).trim()); 
      finalresult.add(mylist); // adding after str2 
      mylist = new ArrayList<>();// creating new list after str 
     } 
     } 

    } 
1

试试这个:

public static void main(String... args) { 
      String cmdMessage="str1 : root;str2 : cisco123,12345,2345;str1 : 
        root234;str2 : cccccc"; 
      List myList = new ArrayList(); 
      String[] str = cmdMessage.split(";"); 
      List<List> finalList= new ArrayList(); 
      for(String s: str) 
      { 
       if(s.contains("str1")) 
      { String[] newStr=s.split(":"); 
       myList.add(newStr[1].trim()); 
      } 
       if(s.contains("str2")) 
       { String[] newStr=s.split(":"); 
        myList.add(newStr[1].trim()); 
        finalList.add(myList); 
        myList=new ArrayList(); 
        } 

       } 

      Iterator it = finalList.iterator(); 
      while(it.hasNext()) 
      { 
       System.out.println(it.next()); 

      } 

     } 

OP: 
[root, cisco123,12345,2345] 
[root234, cccccc] 


finalList : [[root, cisco123,12345,2345], [root234, cccccc]] 
+0

我想调用一个函数并将其作为参数传递,但该函数 只接受ArrayList类型参数 ..如何将列表转换为Arraylist – Vishwas

+1

您不必... ArrayList实现List接口.. 。因此,每个ArrayList都是一个List ...你可以在传递参数时在任何地方说List而不是ArrayList ...但是当添加数据时你必须使用ArrayList。 – TheLostMind

0

您可以使用正则表达式是这样的:

public static void myfunction() { 
    ArrayList<String> mylist; 

    ArrayList<ArrayList> finalresult = new ArrayList<>(); 

    String cmdMessage = "str1 : root; str2 : cisco123,12345,2345; str1 : root234; str2 : cccccc"; 
    String trimmedMessage = cmdMessage.replaceAll(" ", ""); 
    String[] splitMessage = trimmedMessage.split("str[0-9]:"); 
    for(int i =0;i<splitMessage.length;i++){ 
     if(splitMessage[i].length()>0 && splitMessage[i].contains("root")){ 
      System.out.println("splitted string is " +splitMessage[i] + " " +splitMessage[i+1]); 
      mylist = new ArrayList<>(); 
      mylist.add(splitMessage[i].replaceAll("[;,:]","")); 
      mylist.add(splitMessage[i+1].replaceAll("[;:]","")); 
      i +=1; 
      System.out.println("Adding list "+Arrays.asList(mylist)); 
      finalresult.add(mylist); 
     } 
    } 

    System.out.println(Arrays.asList(finalresult)); 
}