2015-11-07 113 views
1

我想这段代码的输出有三个数组列表中的条目由逗号分隔为分隔符下面("slow,steady"),("blue, white,green")("whale, shark ");。它具有以下输出如何打印第一个数组中的单词,第二个数组中的第二个和第三个数组中的第三个单词的组合?

slow blue whale 
slow white whale 
slow white shark 
steady blue whale 
steady white shark 
and so forth. 

我能够给每一个字分开,并把他们在三个单独的名单。 list1包含慢速稳定list2包含蓝色白色绿色和list3包含鲸鲨。但我无法连接它们。欢迎任何投入。

import java.util.StringTokenizer; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.*; 

public class HelloWorld {  

    String input; //input String 
    StringBuffer output; //Holds the output 
    String delimiter = ","; //Delimiter (default comma (,)) 
    String arrayOfWords[]; 
    List<String> list1 = new ArrayList<String>(); 
    List<String> list2 = new ArrayList<String>(); 
    List<String> list3 = new ArrayList<String>(); 

    int listCount; 

    /* 
    * Generates combinations by applying the 
    * concept of recursion 
    */ 


    public void generateCombinations(String input, String delimiter,int listCount) 
    {  
      output = new StringBuffer();    
      this.input = input;  
      this.delimiter = delimiter; 
      this.listCount = listCount; 

       String[] stockArr = new String[list1.size()]; 
       String[] stockArr1 = new String[list2.size()]; 
       String[] stockArr2 = new String[list2.size()]; 

      if(listCount == 1) { 
       String items1[] = input.split(","); 
       for(int i=0;i< items1.length; i++){ 

       list1.add(items1[i]); 
       } 

      } 

      else if(listCount == 2) { 
       String items2[] = input.split(","); 
       for(int i=0;i< items2.length; i++){ 

       //System.out.println(items2[i]); 
       list2.add(items2[i]); 
       } 

      } 

      else { 
       String items3[] = input.split(","); 
       for(int i=0;i< items3.length; i++){ 

       // System.out.println(items3[i]); 
       list3.add(items3[i]); 
       } 

      } 


     stockArr = list1.toArray(stockArr); 
     stockArr1 = list2.toArray(stockArr1); 
     stockArr2 = list3.toArray(stockArr2); 


     for(String s1 : stockArr){ 

      System.out.print(s1);   
     }   


     for(String s2 : stockArr1){ 

      System.out.print(s2);  
    }   



     for(String s3 : stockArr2){ 

      System.out.print(s3);  
     }   


     for(int i=0;i<list1.size();i++){ 
     String s1 = list1.get(i).toString(); 
       for(int j=0;j<list2.size();j++){ 
        String s2 = list2.get(j).toString(); 
        System.out.println(s1+s2); 
       } 


    } 


} 

    public static void main(String[] args) {  
     ArrayList <String> strings = new ArrayList <String>(); 
     int i=1; 

     for(String string : strings){ 
     new HelloWorld().generateCombinations(string , ",",i); 
      ++i; 
     } 

    }  
} 
+0

所以,你想在年底创造一个巨大的字符串? – lukescomputers

+0

感谢您的回复。我试图打印的是:缓慢的蓝鲸 - 第1行缓慢的白鲸 - 第2行,等等全部在分隔线 –

+0

有没有任何模式? –

回答

0

终于有了它的工作好:) 奖励:现在,这不要紧,你需要多少字来连接。

import java.util.*; 
import java.util.stream.*; 

public class Test { 

    public static void generateCombinations(ArrayList <String> strings, String delimiter){ 

     int stringsSize = strings.size(); 
     int i=0; 
     String text = ""; 
     parseList(text, stringsSize ,i, strings, delimiter); 

    } 

    public static void parseList(String text, int stringsSize, int i, ArrayList <String> strings, String delimiter) { 
     String stringStream = strings.get(i); 
     String[] list = stringStream.split(delimiter); 
     if (i==stringsSize-1) { 
      for (String string : list){ 
       System.out.println(text + " " + string.replaceAll("\\s+","")); 
      } 
     } else { 
      for (String string : list){ 
       String text2 = text + " " + string.replaceAll("\\s+",""); 
       int j = i+1; 
       parseList(text2, stringsSize, j, strings, delimiter); 
      } 
     } 
    } 

    public static void main(String[] args) {  
     ArrayList <String> strings = new ArrayList <String>(); 
     strings.add("slow,steady"); 
     strings.add("blue, white, green"); 
     strings.add("whale, shark "); 

     generateCombinations(strings , ","); 

    } 
} 

结果:

slow blue whale 
slow blue shark 
slow white whale 
slow white shark 
slow green whale 
slow green shark 
steady blue whale 
steady blue shark 
steady white whale 
steady white shark 
steady green whale 
steady green shark 
+0

感谢response.I试图it.It工作perfectly.The递归的概念似乎以适应这里完美。 –

+0

不客气,这对我来说也是一种很好的锻炼。 – Fundhor

+0

没问题。我只是有一个问题,我无法确定当我试图通过for循环打印时,代码中出现了什么问题。任何想法。可能是列表每次重新初始化为空? –

1

这可以使用嵌套for循环来完成。在你的情况下3层。

stockArr = list1.toArray(stockArr); 
    stockArr1 = list2.toArray(stockArr1); 
    stockArr2 = list3.toArray(stockArr2); 

    for (String a : stockArr) { 
     for (String b : stockArr1) { 
      for (String c : stockArr2) { 
       System.out.println(a + " " + b + " " + c); 
      } 
     } 
    } 

而且,它总是更好的性能,如果您使用StringBuilder到Concat的多个String。即

for (String a : stockArr) { 
     for (String b : stockArr1) { 
      for (String c : stockArr2) { 
       StringBuilder sb = new StringBuilder(); 
       sb.append(a) 
        .append(" ") 
        .append(b) 
        .append(" ") 
        .append(c); 
       System.out.println(sb.toString()); 
      } 
     } 
    } 
+0

感谢reply.I添加第三for循环太多,但itsn't印刷三个layers.It打印出空白 –

+0

我想指出,它不是__always__更好的性能。这取决于情况和基准需要做的准确地确定效率。 –

+0

加入这个删除空白:sb.append(myWord.replaceAll(“\\ S +”,“”)) – Fundhor

0

试试这个

public static void main(String[] args) { 

    List<String[]> afterSplit = new ArrayList<String[]>(); 
    afterSplit.add("slow, steady".split(",")); 
    afterSplit.add("blue, white, green".split(",")); 
    afterSplit.add("whale, shark ".split(",")); 
    for (int i = 0; i < afterSplit.get(0).length; i++) { 
     for (int j = 0; j < afterSplit.get(1).length; j++) { 
      for (int k = 0; k < afterSplit.get(2).length; k++) { 
       System.out.println(afterSplit.get(0)[i].trim() + " " 
         + afterSplit.get(1)[j].trim() + " " 
         + afterSplit.get(2)[k]); 

      } 
     } 

    } 

} 
+0

这一个工程too.But如果只有三根弦是present.Thanks虽然 –

相关问题