首页 > 技术文章 > 根据下标切割数组

naiwenmoer 2017-05-23 09:24 原文

现有需求:String[] arr1 = [A,A,A,A,B,B,B,B,B,C,C,C]           String[] arr2 = [A1,A2,A3,A4,B1,B2,B3,B4,B5,C1,C2,C3]

根据A类或B类或C类切割arr2数组

 1 //根据大类数组切割中类数组
 2     public Object[] splitArray(String[] str1,String[] str2){
 3         Set<Integer> set = new HashSet<Integer>();
 4         set.add(0);
 5         for (int i = 0; i < str1.length - 1; i++) {
 6             if(!(str1[i].equals(str1[i+1]))){
 7                 set.add(i+1);
 8             }
 9         }
10         set.add(str1.length);
11         Integer[] sep = set.toArray(new Integer[1]);
12         System.out.println("set---"+set);
13         for(Integer sep_i:sep){
14             System.out.println("sep---"+sep_i);
15         }
16 
17         List<List<String>> subAryList = new ArrayList<List<String>>();
18             
19         for(int i = 0; i < sep.length - 1; i++){
20             int index = sep[i];
21 
22             int j = 0;
23             List<String> list = new ArrayList<>();
24             while (j < (sep[i+1]-sep[i]) && index < str2.length) {  
25                 list.add(str2[index++]);
26                 j++;
27             } 
28             subAryList.add(list); 
29             System.out.println("list----"+list);
30         }
31         System.out.println("-------subAryList-->"+subAryList);
32         
33         Object[] subArray = new Object[subAryList.size()];
34         for(int i = 0; i < subAryList.size(); i++){  
35             List<String> subList = subAryList.get(i);  
36             String[] subAryItem = new String[subList.size()];  
37             for(int j = 0; j < subList.size(); j++){  
38                 subAryItem[j] = subList.get(j);  
39             }  
40             subArray[i] = subAryItem;  
41         }  
42         return subArray;
43     }

在所需要的地方调用

1 Object[] subArray = splitArray(str1,str);
2         for(Object obj: subArray){//打印输出结果  
3             String[] aryItem = (String[]) obj;      
4             for(int i = 0; i < aryItem.length; i++){  
5                 System.out.print(aryItem[i] + ", ");  
6             }  
7             System.out.println();  
8         }  

输出结果

set---[0, 4, 9, 12]
sep---0
sep---4
sep---9
sep---12
list----[A1, A2, A3, A4]
list----[B1, B2, B3, B4, B5]
list----[C1, C2, C3]
-------subAryList-->[[A1, A2, A3, A4], [B1, B2, B3, B4, B5], [C1, C2, C3]]
A1, A2, A3, A4, 
B1, B2, B3, B4, B5, 
C1, C2, C3,

 

推荐阅读