Java练习题:将String数组包含参数str的元素存入另一个数组并返回

关于获取字符串中出现子字符串的次数和个数,方法大体相同.一通白通,只要掌握了方法,就很简单.如果你不知道String的contains方法,repalce,replaceAll.还有toCharArray方法做起来就相当困难.如果掌握了ArrayList集合的话就更方便了.

ArrayList的底层也是数组来实现的.具体区别就是ArrayList的长度是不固定的.数组的长度必须在初始化的时候就规定好.事实上如果能用ArrayList解决的问题,用数组也能解决.只是具体实现上有所不同.


这种方法是使用集合做的,将包含的子字符串的元素添加到集合当中

因为题目要求返回的是数组,所以再用List的toArray方法,用一个新数组来接受返回到main方法里就好了.简单明了

import java.util.ArrayList;
import java.util.Arrays;

/**
 * 定义方法filter
 要求如下:
 形参:String [] arr,String  str
 返回值类型:String []
 实现:遍历arr,将数组中包含参数str的元素存入另一个String 数组中并返回
 PS:返回的数组长度需要用代码获取
 ②在main方法中完成以下要求:
 定义一个String数组arr,数组元素有:"itcast","itheima","baitdu","weixin","zhifubao"
 调用filter方法传入arr数组和字符串”it”,输出返回的String数组中所有元素
 */
public class ArrayListExam02 {
    public static void main(String[] args) {
        String[] arr={"itcast","zhifubao","itheima","weixin","baitdu"};
        String[] its = filter(arr, "it");
        System.out.println(Arrays.toString(its));
//        filter(arr,"it");
    }
    public static String[] filter(String[] arr, String str){
        ArrayList list = new ArrayList<>();
        for (String s : arr) {
            if (s.contains(str)){
                list.add(s);
            }
        }
        System.out.println(list);

        String[] newArr= new String[list.size()];
        newArr=list.toArray(newArr);
        return newArr;
    }
}

下面这种是使用数组来做的,步骤比集合繁琐.因为新数组初始化时,必须要确定数组的长度.所以必须先定义一个计数器.将包含的元素个数作为新数组的初始化长度.后面大体和前面几题的思想相同.

import java.util.Arrays;

/**
 * 定义方法filter
 要求如下:
 形参:String [] arr,String  str
 返回值类型:String []
 实现:遍历arr,将数组中包含参数str的元素存入另一个String 数组中并返回
 PS:返回的数组长度需要用代码获取
 ②在main方法中完成以下要求:
 定义一个String数组arr,数组元素有:"itcast","itheima","baitdu","weixin","zhifubao"
 调用filter方法传入arr数组和字符串”it”,输出返回的String数组中所有元素
 */
public class Exam02 {
    public static void main(String[] args) {
        String[] arr={"itcast","zhifubao","itheima","weixin","baitdu"};
        String[] its = filter(arr, "it");
        System.out.println(Arrays.toString(its));
    }
    public static String[] filter(String[] arr,String str){
        int count=0;
        for (int i = 0; i < arr.length; i++) {
            String s = arr[i];
            if (s.contains(str)){
                count++;
            }
        }
        String[] newArr = new String[count];
        int index=0;
        for (int i = 0; i < arr.length; i++) {
            String s = arr[i];
            if (s.contains(str)){
                newArr[index]=s;
                index++;
            }
        }
        return newArr;
    }
}

这里值得注意的是,在给新数组赋值的时候,必须得定义一个新数组的索引.一个循环只能把老数组中包含的元素遍历出来.如果用老数组的索引进行赋值的话,可能会出bug.新数组的索引不能根据老数组的索引变化.定义一个index,当包含这个元素,赋值,然后索引加一,这样就不会出现空,或者返回错误元素的情况.


综上所述,集合,数组,字符串中的方法综合应用.合理运用三者其中的方法.字符串转数组.字符串遍历添加到集合当中.集合转数组,数组遍历添加到集合当中.如果有一个方法比较麻烦,很难实现.就转化成另一种形式,将元素赋值进去.这样选择一种方便而又高效并且便于自己理解的方法实现不同的需求.

你可能感兴趣的:(JavaSE)