2013-12-18 2 views
0

Я использую arraylist в java. Я написал следующий код:Как распечатать список массивов в необходимом формате?

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

Что произошло здесь, независимо от того, какая итерация цикла for выполняется, элементы добавляются в тот же список 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 only..Как преобразовать List в 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)); 
} 
Смежные вопросы