20220720 第五小组 罗大禹 学习笔记

20220720 第五小组 罗大禹 学习笔记

Java String类方法及包装器

学习重点

1.String类的方法
2.包装器

学习心得

老师上午讲的String类的方法我感觉很好理解,下午讲的包装器有点没有弄懂,需要自己看看视频或者问问同学来弄懂,最后做的练习没有跟上老师的思路,需要自己回去看老师的代码理解理解

学习内容

String字符串(理解)

  String字符串
  String是一个类
  类中可以有哪些结构?
  属性 方法 构造器
String是不是也有属性 方法 构造器?
    是
String一旦声明,不可改变!!!(内存级别)

举例说明:

public class Ch01 {
    public static void main(String[] args) {
        //String既然是一个类,s1应该叫做String类的对象
        //类如果要创建对象,是需要new的,s1并没有new,为什么是s1也可以叫对象?
        String s1="abcdefg";
        //s2是通过new创建出来的String类的对象
        //而创建对象时需要构造器的
        String s2=new String("abcdefg");
        String s3=new String("abcdefg");
        String s4="abcdefg";
   
        //双等号比较的是虚地址
        //虚地址:对象在内存中的储存位置
        System.out.println(s1==s2);
        //new代表新建,是存在堆里的,每new一个就会新建一个,因此虚地址是不同的
        System.out.println(s3 == s2);
        //常量会存在方法区里,内容相同的话地址就会相同
        System.out.println(s1 == s4);
        /*
            等号赋值,若内容相同,无论怎么比较,都是true
            new用双等号比较,无论内容是否相同,结果都是false;
         */
    }
}

String类的方法

1. equals方法:比较字符串的内容
  1. 需要传参,传一个String类型的参数
  2. 是具有返回值的,返回值类型为boolean类型
  3. 访问权限public
举例说明
import java.util.Scanner;

public class Ch02 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串1");
        String s3 = sc.next();
        System.out.println("请输入字符串2");
        String s4 = sc.next();
        System.out.println(s3==s4);
        System.out.println(s3.equals(s4));
    }
}
2. length方法:字符串的长度

字符串是字符拼接起来的,因此是有长度的,长度为字符的个数

  1. 不需要传参
  2. 有返回值,返回值的类型为整型int
  3. 访问权限public

字符串获取长度的方法和数组获取长度有什么区别?
    数组的length是属性,而字符串的length()是方法

举例说明
public class Ch03 {
    public static void main(String[] args) {
        String s1="aa";
        //是有下标的
        System.out.println(s1.length());
    }
}
3. charAt方法:取出指定下标位置的字符

  String既然有长度,那就有下标。
  与数组相同,可能会出现下标越界的异常

举例说明
import java.util.Scanner;

public class Ch04 {
    public static void main(String[] args) {
        String s1="abcd";
        System.out.println(s1.charAt(0));
        Scanner sc=new Scanner(System.in);
        //取出输入的字符串的第一个字符,将其赋值给char类型的c
        char c = sc.next().charAt(0);        
    }
}
4. indexOf方法:判断指定字符是否存在
  1. 有返回值,返回值为字符在字符串中的下标
  2. 返回从左到有右遇到的第一个匹配的下标
  3. 如果不存在,则返回-1
package com.morning;

public class Ch05 {
    public static void main(String[] args) {
        String s1="abcdefgaaa";
        //indexOf(String , int)代表从int位置开始查找(包括int),遇到String返回下标
        System.out.println(s1.indexOf("a",1));
        //从后往前找
        System.out.println(s1.lastIndexOf("a",6));
    }
}
5.substring方法:字符串的截取

  需要传参(参数为字符串的下标),若只输入一个数字,则从指定位置开始截取,直到字符串的末尾(包含起始位置)
                           若输入两个数字,则从第一个数字开始截取到第二个数字结束(包含起始位置,不包含终止位置)
  该方法会生成一个新的字符串,不会改变原有数据

举例说明:
package com.morning;

public class Ch06 {
    public static void main(String[] args) {
        String str ="abcdefghijklmn";
        String s =str.substring(1,3);
        System.out.println(str);
        //会输出bc
        System.out.println(s);
    }
}
6.字符串和数组的转换
举例说明:
public class Ch02 {
    public static void main(String[] args) {
        //1.数组转字符串(在此不多讲,将数组遍历,然后放进String)
        
        //2.字符串转数组
        	//1.toCharArray方法:转成字符型数组
       	 	//将字符串中的每个字符分别存入char类型的数组中
        String str ="abcdefg";
        char[] array = str.toCharArray();

        	//2.getBytes方法:转成字节型数组(输出的为ASC码)
        	//一般情况下,字节型数组在操作文件的时候会用
        byte []bytes=str.getBytes();
        for (byte b : bytes) {
            System.out.println(b);
        }


        //3.字符串和其它数据类型的转换
        int i =10;
       
        //把int类型转成字符串
        	//任何数据类型和字符串类型做加法,结果都是字符串
        	//不推荐使用(阿里公约不允许)
        String s=i+"";
        
        	//推荐使用
       String s1 = String.valueOf(i);
    }
}
7.其余方法

String类还有许多方法,不在多说,一下举例说明几个方法

下面所有的方法都是返回一个新的字符串
举例说明:
import java.util.Arrays;
import java.util.Locale;

public class Ch08 {
    public static void main(String[] args) {
        String str = "abcdefgc";
        
        //1.toUpperCase方法:字母转大写(不需要传参)
        String str1=str.toUpperCase(Locale.ROOT);
        
        //2.toLowerCase方法:字母转小写(不需要传参)
        System.out.println(str.toLowerCase(Locale.ROOT));
        
		//3.equalsIgnoreCase方法:忽略大小写比较内容(有返回值,返回值类型为boolean)
        System.out.println(str.equalsIgnoreCase(str1));
        
        //4.startsWith方法:判断是否以xxx开头(有返回值,返回值类型为boolean)
        //判断是否以a开头,从下标为1的位置开始
        System.out.println(str.startsWith("a",1));
        
        //5.endsWith方法:判读是否以xxx结尾(需要传参)
        System.out.println(str.endsWith("a"));
        
        String str2 = "    ABCDEFG        ";
        //6.trim方法:去字符串前后的空格(不需要传参)
        System.out.println(str2.trim());
        
        String str3="123,456,789,00";
        //7.split方法:根据指定的字符分割,分割之后,分割条件会消失(需要传参)
        String[] strings = str3.split(",");
        System.out.println(Arrays.toString(strings));
        
        //8.replace方法:字符串的替换
        //会将找到的字符全部替换
        //将str中全部的c替换成l
        System.out.println(str.replace('c', 'l'));

    }
}

包装器(了解)

  包装器类型(包装类,封装类):

  byte     Byte
  short    Short
  int      Integer
  long     Long
  float    Float
  double   Double
  char     Character
  boolean  Boolean

为什么要有包装器类型???
  场景:
    员工管理系统
    员工:年龄 薪水
    计算总工资、平均年龄,若值为0的话会被计算,null不会。

public class Ch03 {
    public static void main(String[] args) {
        int i = 10;
        
        

        Integer i1 = 10;
            //原理:
            //自动装箱:把int类型包装成了包装器Integer类型
              //基本数据类型转换成对应的包装器类型
        Integer i2 = Integer.valueOf(30);//过时了
        	//Integer i2 =30;
        
            //自动拆箱:把Integer类型转换成int类型
            //包装器类型转换成对应的基本数据类型
        int ii =i2.intValue() ;//过时了
        	//int ii =i2;
    }
}

新功能

JDK5之后的新功能:

  1. 自动装箱和自动拆箱
  2. 增强for循环(foreach)
  3. 枚举

JDK7之后的新功能

  1. switch...case 可以用String

目前遇到过的异常

  1. 数组下标越界
  2. 内存溢出
  3. 空指针
  4. 字符串下标越界
  5. 数字格式化
posted @ 2022-07-20 22:06  怂还嘴硬  阅读(38)  评论(0)    收藏  举报