Java 组合
场景:
- String[][]arr1=new String[3][];
- arr1[0]=new String[]{"a","[^a]"};
- arr1[1]=new String[]{"b","[^b]"};
- arr1[2]=new String[]{"c","[^c]"};
把arr1[0],arr1[1],arr1[2] 进行组合,组合的规则:
(1){"a","[^a]"} X {"b","[^b]"} X{"c","[^c]"}
(2)组合的结果中必须同时有arr1[0],arr1[1],arr1[2]中的一个元素.
比如"abc"就是正确的,a[^b]b就是错误的,因为a[^b]b没有{"c","[^c]"}中的元素.
"acb"是错误的,因为没有按顺序
- /***
- *
- * @param a
- * @param aa
- * @param index : 初始值为0
- */
- public static List<StringBuffer> cc(String[][] aa,int index,List<StringBuffer> list){
- if(index>=aa.length){//说明已经遍历完成
- return list;//并不是每次循环都会执行,最后才会执行此语句.
- }
- String cc[]=aa[index];
- int length=cc.length;
- List<StringBuffer> listNew=new ArrayList<StringBuffer>();
- if(list==null||list.size()==0){//首次循环
- for(int i=0;i<length;i++){
- listNew.add(new StringBuffer(cc[i]));
- }
- }else{
- for(int i=0;i<length;i++){
- for(int j=0;j<list.size();j++){
- StringBuffer sb=list.get(j);
- StringBuffer sb2=new StringBuffer(sb);
- sb2.append(cc[i]);
- listNew.add(sb2);
- }
- }
- }
- List<StringBuffer> list33=cc(aa, ++index, listNew);
- if(!ValueWidget.isNullOrEmpty(list33)){
- return list33;
- }
- return null;
- }
- /***
- * 组合
- * @param aa
- * @return
- */
- public static List<StringBuffer>assemble(String[][] aa){
- return cc(aa, 0, null);
- }
测试1:
- @Test
- public void tset_cc(){
- String[][]arr1=new String[3][];
- arr1[0]=new String[]{"a","[^a]"};
- arr1[1]=new String[]{"b","[^b]"};
- arr1[2]=new String[]{"c","[^c]"};
- List<StringBuffer> list=assemble(arr1);
- System.out.println(list.size());
- System.out.println(list);
- }
测试结果:
- 8
- [abc, [^a]bc, a[^b]c, [^a][^b]c, ab[^c], [^a]b[^c], a[^b][^c], [^a][^b][^c]]
测试2:
- @Test
- public void tset_cc2(){
- String[][]arr1=new String[3][];
- arr1[0]=new String[]{"a"};
- arr1[1]=new String[]{"b"};
- arr1[2]=new String[]{"c"};
- List<StringBuffer> list=assemble(arr1);
- System.out.println(list.size());
- System.out.println(list);
- }
测试结果:
- 1
- [abc]
测试3:
- @Test
- public void tset_cc2(){
- String[][]arr1=new String[2][];
- arr1[0]=new String[]{"a","1","one"};
- arr1[1]=new String[]{"b","2","two"};
- // arr1[2]=new String[]{"c","3"};
- List<StringBuffer> list=assemble(arr1);
- System.out.println(list.size());
- System.out.println(list);
- }
测试结果:
- 9
- [ab, 1b, oneb, a2, 12, one2, atwo, 1two, onetwo]