数组&String&StringBuilder

1.数组

1.1.什么是数组

  • 数组就是一个容器, 用来保存多个相同数据类型数据的容器。

1.2.动态初始化创建数组

  • 创建数组时,必须声明数据类型 还有长度

  • 动态初始化创建数组。

  • 创建数组语法:

    • 变量: 数据类型 变量名 =变量值;

    • 数组: 数据类型[] 数组名=new 数据类型[长度];

  • 示例代码:

            //数据类型[] 数组名 =new 数据类型 [长度]
            //eg:创建一个int型的数组,长度为3
            int[] arr=new int[3];
            //eg:创建一个double型的数组,长度为5
            double[] arr2=new double[5];
            System.out.println(arr);//是其地址值

    1.3.使用数组

  • 打印数组发现 打印出了一串乱码, 这个乱码叫做地址值, 使用数据 就是访问数组的地址值之后使用。

  • 如何访问数组中的元素:

    • 语法: 数组名[索引值]

    • 索引值: 就是数组中元素的下标值, 编号 编号从0开始。

      • 数组长度-1 就是最大索引值。

  • 创建数组之后 数组中会根据数据类型 为数组中的元素赋默认值。

  • 默认初始值:

    • 整数类型:0

    • 浮点类型:0.0

    • 字符类型:\u0000(空格)

    • 布尔类型:false

    • 引用数据类型:null

  • 如何为数组中的元素赋值;

  • 语法: 数组名[下标值]=值;

            int[] arr = new int[3];
    
            double[] arr2 = new double[5];
    
            char[]  arr3 =new char[2];
    
            String[] arr4=new String[5];
    //      赋值
            arr[0]=777;
            arr2[0]=7.77;
    //      访问数组中的元素
            System.out.println(arr[0]);
            System.out.println(arr2[0]);
            System.out.println(arr3[0]);//打印默认值
            System.out.println(arr4[0]);

    用for循环方式打印数组:

  • //      数组的长度用 数组名.length  表示
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
    
  • 1.4.静态初始化创建数组

  • 静态初始化:创建数组的时候直接将元素的值决定,由系统来确定长度!

  • 格式:

    • 完整格式:数据类型[] 数组名= new 数据类型[]{元素1,元素2.........};

    • 省略格式:数据类型[] 数组名= {元素1,元素2,元素3};

 

//        完整格式:
        double[] arr = new double[]{1, 2, 3, 4};
//        省略格式:
        int[] arr2 = {1, 2, 3};

1.5.使用数组时常遇到的问题

  • 数组索引越界异常:ArrayIndexOutOfBoundsException

  • 出现原因: 访问了不存在的索引

  • 解决办法: 修改为正确的即可

        int[] arr ={1,2,3};
        Array    Index   Out  Of  Bounds   Exception
        数组      索引     超出范围/越界       异常
 
        System.out.println(arr[5]);
  • 空指针异常:

  • 出现原因: 当一个对象为null时 , 再访问这个对象时就会出现空指针。

  • 解决办法: 给对象赋一个有效值。

      int[] arr ={1,2,3};
      //   Null   Pointer   Exception
      //    空     指针       异常
      //   null  代表空值 , 引用数据类型的默认值  代表不指向任何有效的对象。
      arr=null;
      
      System.out.println(arr[0]);

    1.6.Arrays类方法

        int []a={23,1,34,4,14};
        System.out.println(a);//[I@5fd0d5ae
        //toString打印数组元素
        System.out.println(Arrays.toString(a));//[23, 1, 34, 4, 14]
        //sort数组排序
        Arrays.sort(a);
        System.out.println(Arrays.toString(a));//[1, 4, 14, 23, 34]
        //fill数组填充
        //数组中所有元素填充为0
        Arrays.fill(a,0);
        System.out.println(Arrays.toString(a));//[0, 0, 0, 0, 0]
        //数组下标为2到4之间的元素填充为1(包括2但不包括4)
        Arrays.fill(a,2,4,1);
        System.out.println(Arrays.toString(a));//[0, 0, 1, 1, 0]
 

1.7.小练习

P1:定义一个数组,输出其中最大值

        // 1.定义一个数组
        int [] arr={100,330,85,9632,525};
        // 2.定义一个max,记录最大值使用
        int max=arr[0];
        // 3.遍历数组,拿到每一个元素,跟max比较
        for (int i=1;i<arr.length;i++){
            if(arr[i]>max){
                max=arr[i];
            }
        }
        System.out.println("最大值"+max);

P2:数组第一个元素和最后一个元素交换位置

        int [] arr={2,3,4,5,6,7,8,9};
        int temp=arr[arr.length-1];
        arr[arr.length-1]=arr[0];
        arr[0]=temp;
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i]);
        }

2.String类

  • 代表的是字符串对象。

  • String的构造方法

    • String str =new String("abc");

    • String str ="abc";

    • String str =new String(char[] arr);

        String str=new String();
        System.out.println(str);//空,因为没传值
        char []arr={'1','a','2','b'};
        String str1=new String(arr);
        System.out.println(str1);//1a2b
        System.out.println(str1.hashCode());//地址

        String str3=new String("a");
        System.out.println(str3);//a
  • 成员方法:

    • equals();

      • 比较的是两个字符串中的内容 ,区分大小写。

    • equalsIgnoreCase();不区分大小写的比较,也是比较内容

    • ==号;

      • 比较的是:基本数据类型:比较的是值。

      • 引用数据类型:比较的是地址值。

    • char charAt(int index);   获取指定索引上的字符

    • int length() ;获取字符串长度。

        String s1=new String("abcd");
        String s2=new String("abcd");
        System.out.println(s1.equals(s2));//true
        System.out.println(s1==s2);//false

        char c = s1.charAt(3);
        System.out.println("c:"+c);//d

        int length = s1.length();
        System.out.println("length:"+length);//4

        //字符还能比大小
        System.out.println('a'>'n');//false

 Arrays.toString(数组名);将该数组已[ , , , ]形式打印,其底层是一下代码:

public class StringDemo01 {

    public static void main(String[] args) {

        /**
         * 给定一个数组  int[] arr={1,2,3};
         * 编写一个方法 打印数组  :   输出样例:[1,2,3]
         */
        // 定义一个数组
        int[] arr = {1, 2, 3, 4};
        //调用方法  ,用一个字符串对象接收结果。
        String result = arrayToString(arr);
        System.out.println("result = " + result);
    }
    public static String arrayToString(int[] arr) {
        String result = "";
        result += "[";
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                result += arr[i];
            } else {
                result += arr[i];
                result += ",";
            }
        }
        result += "]";
        return result;
    }
}

练习:反转字符串:声明一个字符串String str="abc";使用方法  将str反转成一个新字符串cba

   public static void main(String[] args) {
  
        String str1="abcdefg";
        String str2=reverse(str1);

        System.out.println("str1= "+str2);
    }
    public static String reverse(String s){
        String result="";
        for (int i = s.length()-1; i >=0; i--) {
            char c=s.charAt(i);
            result+=c;
        }
        return result;
    }

拓展:String中的方法

2.1String类方法(判断功能)

public class StringMethod1 {
    public static void main(String[] args) {
        String str="abc";
        String str1="ABC";
        System.out.println(str.equals(str1));
        //不区分大小写
        System.out.println(str.equalsIgnoreCase(str1));

        //判断在整个字符串是否以传入的字符串开头
        String s="helloworld";
        String s1="hello";
        String s2="ello";
        boolean flag = s.startsWith(s1);
        boolean flag1 = s.startsWith(s2);
        System.out.println("flag="+flag);
        System.out.println("flag1="+flag1);

        //判断在整个字符串是否以传入的字符串结尾
        String s3="orld";
        boolean flag2 = s.endsWith(s3);
        System.out.println("flag2="+flag2);

        //判断整个字符串是否包含传入的字符串
        String s4="owo";
        boolean flag3 = s.contains(s4);
        System.out.println("flag3="+flag3);

        //判断字符串是否为空
        String str0="";
        boolean flag4 = str0.isEmpty();
        System.out.println("flag4="+flag4);

    }
}

2.2String类方法(获取功能)

public class StringMethod2 {
    public static void main(String[] args) {
        String str="aabbccddbc";
        // 传入一个字符串 获取 第一次出现的索引位置。
        String str1="bc";
        int index = str.indexOf(str1);
        System.out.println("index = " + index);
        //传入一个字符串 获取 最后一次出现的位置。
        int index1=str.lastIndexOf(str1);
        System.out.println("index1 = " + index1);

        //截取字符串   指定索引处开始截取 ,  默认到结尾  包含指定索引
        String result = str.substring(1);
        System.out.println("result = " + result);

        //截取指定索引范围的字符串,  包含开始索引,不包含结束索引   包左不包右
        String result1 = str.substring(1, 5);
        System.out.println("result1 = " + result1);
    }
}

2.3String类方法(转换功能)

public class StringMethod3 {
    public static void main(String[] args) {
        String str = "aaBbCcDdEe";
        //将字符串转换成大写
        String result = str.toUpperCase();
        System.out.println("result = " + result);
        //将字符串转换成小写
        String result1 = str.toLowerCase();
        System.out.println("result1 = " + result1);
        //替换字符串
        String result2 = str.replace("aa", "qqqqqqq");
        System.out.println("result2 = " + result2);

        //偶尔也可以用无空替换空格,以达到删点空格的目的
        String str0 ="  atu  in  ";
        String replace = str0.replace(" ", "");
        System.out.println("清除空格后"+replace);
        //将字符串转换成char数组
        char[] arr = str.toCharArray();
        System.out.println("arr="+ Arrays.toString(arr));
    }
}

2.4String类方法(其他功能)

public class StringMethod4 {
    public static void main(String[] args) {
       // 按指定规则切割字符串成几段
        String str ="     123456,654321,22   22,sam,2022-10-10    ";
        String[] arr = str.split(",");//以,为分割点将原字符串分成几组
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr[i]="+arr[i]);
        }

        //去掉字符串两端的空白
        String result = str.trim();//只能去两端
        System.out.println("result = " + result);

        //要想去掉中间空格还是得用替换空格,所以索性直接替换全部
        String result1=  str.replace(" ","");
        System.out.println("result1 = " + result1);

    }
}

3.StringBuilder类

3.1StringBuilder概念

  • StringBuilder是一个可变的字符序列

  • 来自于java.lang 包 所以不需要导包。

3.2StringBuilder的构造方法

  • StringBuilder(); 创建一个内容为空的字符串缓冲区对象。

  • StringBuilder(String str); 根据字符串内容来创建一个缓冲区对象。

        StringBuilder  sb=new StringBuilder();
        System.out.println("sb = " + sb);
        System.out.println(sb.length());
        System.out.println(sb.hashCode());
        sb.append("hello");  //拼接方法
        System.out.println("sb = " + sb);
        System.out.println(sb.hashCode());
        //根据字符串内容 创建一个可变的字符串对象  括号中为内容
        StringBuilder sb2 =new StringBuilder("helloworld!");
        System.out.println("sb2 = " + sb2);
        System.out.println(sb2.length());

3.3成员方法:

StringBuilder append(任何类型);拼接作用

StringBuilder reverse();内容反转

String toString();      将StringBuilder转换成String

int length();  长度

public class StringBuilder01 {
    public static void main(String[] args) {
        //创建对象
        StringBuilder sb=new StringBuilder();
        //StringBuilder append(任何类型);拼接作用
        sb.append("hello").append("java").append(200);//多个拼接
        System.out.println("sb="+sb);//sb=hellojava200

        //StringBuilder reverse();内容反转
        sb.reverse();
        System.out.println("sb="+sb);//sb=002avajolleh

        //String toString();      将StringBuilder转换成String
        String s=sb.toString();
        System.out.println("s="+s);

        //int length();  长度
        int i=sb.length();
        System.out.println("i="+i);//12

    }

}

3.4 案例——StringBuilder 判断对称字符串。

public class StringBuilder02 {
    /**
     * 判断数组中的每个字符串  是否是对称字符串
     *
     *  分析:
     *  1. 遍历数组 ,拿到每一个字符串
     *  2.通过StringBuilder来完成字符串的反转
     *  3.反转后的字符串 和原来的字符串比较   eq
     *       true;对称
     *       false:
     */
    public static void main(String[] args) {
        String[]  str ={"aa","ab","大王王大","上海海上","asdfghjk"};
        print(str);
    }

    public static  void print(String[] arr){
        for (int i = 0; i < arr.length; i++) {
            //遍历数组 拿到每一个字符串
           String str= arr[i];
           //通过StringBuilder 来完成字符串反转。
           StringBuilder sb =new StringBuilder(str);
           String result= sb.reverse().toString();//反转后又转为String类型,以使用String类中方法
           if (str.equals(result)){
               System.out.println(str+"是对称的");
           }else{
               System.out.println(str+"不是对称的");
           }
        }
    }
}

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值