Java,搜索字符串数组的元素并将它们写入另一个数组

时间:2015-11-25 13:26:50

标签: java arrays string

我正在寻找一个解决方案,我可以从另一个中获取包含数组。

例如: 我有一个数组: 数组= [S1 !! T1,S1 !! T2,S1 !! T3,S2 !! T1,S2 !! T2,S3 !! T1,S3 !! T2,S3 !! T3]

我在“Array”中寻找包含“S2”的元素并将它们写入另一个元素。所以我应该得到:

结果= [S2 !! T1,S2 !! T2]

我已经尝试了Arrays.asList(I).contains(i),但这不是我想象的那样。

2 个答案:

答案 0 :(得分:1)

如果您希望将一个数组的元素复制到另一个数组,首先需要做的是遍历一个数组的元素,如果找到匹配项,则将其存储到另一个数组中。

假设你有以下数组:

String[] arr = new String[]{"S1!!T1", "S1!!T2", "S1!!T3", "S2!!T1", "S2!!T2", "S3!!T1", "S3!!T2", "S3!!T3"};

我们不知道数组中有多少元素会匹配,直到我们遍历它们,所以我们有两个选择:

  1. 创建另一个与arr大小相同的数组(如果并非所有arr条目都匹配,则会导致数组中出现一些空值)
  2. 使用ArrayList,然后在需要时将ArrayList转换为数组
  3. 见下文:

    public static void main(String[] args) {
            String[] arr = new String[]{"S1!!T1", "S1!!T2", "S1!!T3", "S2!!T1", "S2!!T2", "S3!!T1", "S3!!T2", "S3!!T3"};
            List<String> s2List = new ArrayList<String>(); 
    
            //loop through arr and for each element check if it contains S2
            for(int i = 0; i < arr.length; i++) {
                //if it contains S2 then it returns true and we add it to list
                if(arr[i].contains("S2")) {
                    //add to list the element
                    s2List.add(arr[i]); 
                }
            }
    
            //print the list for testing
            System.out.println(s2List); 
    
            //if you wish to store the elements to array then
    
            //now we know how many matched, so we can create array with the 
            //size of elements in s2List 
            String[] sArr = new String[s2List.size()]; 
    
            //Here loop through the list and assign values to array
            for(int i = 0;  i < s2List.size() ; i++) {
                sArr[i] = s2List.get(i); 
            }
    
            //print the array
            System.out.println(Arrays.toString(sArr));
        }
    

    您还可以使用其他将List直接转换为数组的方法,但上面的内容可以让您了解如何解决您提出的问题。

答案 1 :(得分:0)

您可以使用Java 8流

String[] filtered = Stream.of(strings).filter(s -> s.contains("S2")).toArray(String[]::new);