繁体   English   中英

如何以所需格式打印阵列列表?

[英]How to print array list in required format?

我在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技巧。

我如何得到这个结果?

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

尝试这个 :

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]]

无论发生了哪个for循环迭代,这里发生的事情都是将元素添加到同一列表mylist 在每次迭代结束时,将“ mylist”添加到finalresult 也就是说,在这种情况下, 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); 
}
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
        }
      }

    }

您可以使用如下正则表达式:

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));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM