2022-7-20 学习日记(11th day)String

目录

String类

String的方法:

equals方法: 

 length方法:

indexOf方法: 

练习:

substring方法:

转大写:toUpperCase()

转小写:toLowerCase() 

判断是不是以XXX开头

判断是否以xx结尾

忽略大小写比较内容: 

 去掉字符串前后的空格:

 根据指定的字符分割,分割之后,分割条件消失:

字符串的替换 

字符串和其他数据类型的转换 

字符串转数组 

 包装器:

 封箱、拆箱:

异常:

JDK5之后的新功能:

JDK7之后的新功能:

思维导图:


String类

String 字符串
String是一个类
类中可以有哪些结构?
属性,方法,构造器
那String这个类是不是也有属性,方法,构造器?

String s1="abcdefg";

String既然是一个类,s1就应该叫做String类的对象
类如果要创建对象,一定要先new,s1并没有new,为什么s1也可以叫做对象

String s2=new String("abcdefg");

s2是通过new创建出来的String类的对象;创建对象是要调用构造器

s1和s2的abcdefg不在同一个区域内。(不在同一块内存空间里)

双等号比较的是虚地址

虚地址:对象在内存中的存储位置

System.out.println(s1==s2);//false

String s3=new String("abcdefg");

虽然一个样子,但是只要是new,他就是新建一个地址,双等号还是比较地址的,所以就不相等

System.out.println(s2==s3);//false

String s4="abcdefg";

System.out.println(s1==s4);//true

 小结:

        =赋值,无论怎么比较,都是true;        

        new赋值,用双等号比较,都是false; 

        String s1="a";
        String s2="a";
        System.out.println(s1==s2);

 除了这种方式,其余所有字符串都是默认用的new的方式,也就是其他的所有比较都是false

        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);

输出结果为:false,那我想让他内容一样的就相等,不是比较地址呢?

String是类,那么这些s1,s2,s3都是对象,这些对象就都可以调用方法

String的方法:

equals方法: 

功能:比较字符串

1.需要传参,传String类型的参数

2.有返回值,返回值是boolean类型

3.访问权限:public

s3.equals(s4);//返回布尔型

 length方法:

1.不需要传参

2.有返回值,整型int

3.访问权想public

s3.length();

字符串获取长度的方法,和数组获取长度有什么区别?

数组的length是属性,字符串的length()是方法.

String b="abcdefg";
System.out.println(b.length());

取出指定下标位置的字符,需要传入Int类型的下标,返回一个char类型的返回值

System.out.println(c.charAt(0)); 

键盘输入没有char,那么我就想要char怎么做 

Scanner sc1=new Scanner(System.in);
char c1=sc1.next().charAt(0);

indexOf方法: 

判断指定字符是否存在

一般听到判断,我们都会想到返回值是布尔型

但是这个返回值是int型,返回值为字符串在d的下标。

如果不存在,返回-1;

indexOf(String,int)代表从int位置开始查找,包括当前位置

System.out.println(d.indexOf("a",0));
System.out.println(d.lastIndexOf("a"));
//从后往前找,但是不是按照从右到左的查,下标还是按照下标数字计算

练习:

统计一个字符串在另一个字符串中出现的次数!!

        String sc="abddfsxdzzvvccxfdsfaafa";
        String ss="ab";
        int index=0;
        int sum=0;
        while (sc.indexOf(ss,index)!=-1){
            index=sc.indexOf(ss,index)+1;
            sum++;
        }
        System.out.println(index);

substring方法:

截取字符串:

String a="abcdefghijklmnopqrstuvwxyz";
String x=a.substring(1);//传一个参数,从指定位置开始截取截到字符串的末尾;
System.out.println(a);//我们截取后a会改变吗,答案是并不会。
System.out.println(x);//包括起始位置的字符,并生成一个新的字符串,不会改变原有的数据
String y=a.substring(1,2);//两个参数,从指定位置到指定位置结束,不包括末尾。(前闭后开)
System.out.println(y);

练习:

键盘输入身份证号,输出年龄,性别,生日。

eg:220 122 1990 09 09 1456,倒数第二位奇数:男,偶数:女 

 主方法:

    public static void main(String[] args) {    
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入身份证号");
        String ss=sc.next();
        test03 t=new test03();
        System.out.println(t.Id(ss));
    }

 调用方法:

    public String Id(String ss){
        if(ss.length()==18) {
            String month = ss.substring(10, 12);
            String day = ss.substring(12, 14);
            String year = ss.substring(6, 10);
            int x = 2022 - Integer.parseInt(year);
            int sex = ss.charAt(16);
            String person = "性别为:女";
            if (sex % 2 != 0) {
                person = "性别为:男";
            }
            String a = "生日为:" + month + "月" + day + "日," + person + ",年龄为:" + x;
            return a;
        }
        return "数据错误";
    }

转大写:toUpperCase()

转小写:toLowerCase() 

判断是不是以XXX开头

.startsWith("a")

.startsWith("a",2));//偏移两位判断是否以a为开头

判断是否以xx结尾

.endsWith("i")

忽略大小写比较内容: 

        String x="abcd";
        String y="ABCd";
        System.out.println(x.equalsIgnoreCase(y));
        //x与y对比

 去掉字符串前后的空格:

        String z="    asdad   ";
        System.out.println(z.trim());

 根据指定的字符分割,分割之后,分割条件消失:

        String stra="123,asd,456,asd,789";
        String []strings=stra.split(",");
        System.out.println(Arrays.toString(strings));

字符串的替换 

        String sa="hello";
        System.out.println(sa.replace("e", "s"));//单个字符
        System.out.println(sa.replaceAll("ello", "i"));//多个字符
        System.out.println(sa.replaceAll("l", "i"));//l都被转换为了i

字符串和其他数据类型的转换 

int i=10;
String qa=String.valueOf(i);//int转String

字符串转数组 

        int []arr=new int[]{1,2,3};
        String array="abcdefg";
        //转成字符型数组
        char[] arrays=array.toCharArray();
        for(char c:arrays){
            System.out.println(c);
        }
        //转成字节型数组
        //一般情况下,字节型数组在操作文件的时候,常用的IO流
        byte[] bytes=array.getBytes();
        for(byte b:bytes){
            System.out.println(b);
        }

 包装器:

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

byte-----Byte

short----Short

int--------Integer

long-----Long

float-----Float

double--Double

char-----Character

boolean-Boolean

基本数据类型可以直接赋值,但是类不是得创建对象吗,那这样写不会比较麻烦吗

自从JDK5以后就可以直接赋值了。这种赋值就叫封箱,拆箱

 封箱、拆箱:

int i=10;
Integer id=30;//自动装箱
int i1=id;//自动拆箱
Integer i2=Integer.valueOf(50);//jdk5之前必须这么转
int ii2=i2.intValue();//jdk5之前必须这么转

原理:

        装箱:

                把int类型包装成了包装器Integer类型

                基本数据类型转换成对应的包装器类型

        拆箱:

                int i1=i2;

                 把Integer类型转换成int; 包装器类型转换成对应的基本数据类型

异常:

1.数组下标越界

2.空指针

3.字符串下标越界

4.数字格式化

5.内存溢出 

JDK5之后的新功能:

1.自动装箱和自动拆箱

2.增强for循环(foreach)

3.枚举

JDK7之后的新功能:

1.switch...case 可以用字符串String 

思维导图:

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值