Java读书笔记(七)

8.String

8.2String

​ String类代表字符串,Java中所有的字符串文字都被实现为此类的实例,也就是说,Java中所有的双引号字符串,都是String类的对象。

​ 字符串特点:字符串不可变,它们的值在创建后不能被更改。虽然String的值是不可变的,但是它们可以被共享。字符串效果上相当于字符数组(char【】),但底层原理是字节数组(byte【】)。

8.2.1String 构造方法

  1. public String():创建一个空白字符串对象,不含有任何内容。
  2. public String(char[] chs):根据字符数组的内容来创建字符串对象
  3. public String(byte[] bys):根据字节数组的内容来创建字符串对象
  4. String s=“abc”; :直接赋值的方式创建字符串对象,内容就是abc。

8.2.2String 对象的特点

  1. 通过new创建的字符串对象,每一次new都会申请一个内存空间,虽然内容相同,但是地址不同。
  2. 以双引号“ ”方式给出的字符串,只要字符串序列相同(即顺序和大小写),无论在程序代码中出现几次,JVM都只会建立一个String对象,并在字符串池中维护。

8.2.3.字符串的比较

equls和==的区别就在此

public Boolean equls(Obiect anObject):将此字符串与指定对象进行比较。由于我们是比较的字符串对象,所以参数直接传递一个字符串。

equls方法源码:

public boolean equals(Object obj) {
        return (this == obj);
    }

由上可见,equls在未重写时是与==相同的,而连等“= =”比较基本类型时是比较基本类型的值,比较引用类型则是比较在栈内存中的地址。

equls不能被用来比较基本类型,它只能用于比较引用类型,因此在被引用的类中经常需要重写equls方法。

equls比较字符串的内容,而==比较的是字符串在栈内存中的地址。

//登录功能
public class test {
    public static void main(String[] args) {
        String username = "liuliyue";
        String password = "woaini";
        for (int i = 0; i < 3; i++) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入账户");
            String name = sc.nextLine();
            System.out.println("请输入密码");
            String pswd = sc.nextLine();
            if (name.equals(username) && pswd.equals(password)) {
                System.out.println("登录成功");
            } else {
                if (2 - i == 0) {
                    System.out.println("你的账户已被锁定,请与管理员联系。");
                }
                System.out.println("登录失败,你还有" + (2 - i) + "次机会");
            }
        }
    }
}
//遍历字符串数组
public class test {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入字符串");
        String line=sc.nextLine();
        for (int i=0;i<line.length();i++){
            System.out.println(line.charAt(i));
        }
    }
}

​ 在判断字符串的字符属于字母(大小写)或是数字时,我们采用对象比较值的办法,例如:

  • 大写字母:ch>=‘A’&&ch<=‘Z’;
  • 小写字母:ch>=‘a’&&ch<=‘z’;
  • 数字:ch>=‘0’&&ch<=‘9’;
//统计字符次数
public class test {
    public static void main(String[] args) {
        //键盘录入一个字符串用Scanner实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String line = sc.nextLine();
        int bigcount = 0;
        int smallcount = 0;
        int numbercount = 0;
        for (int i = 0; i < line.length(); i++) {
            char at = line.charAt(i);
            if (at >= 'A' && at <= 'Z') {
                bigcount++;
            } else if (at >= 'a' && at <= 'z') {
                smallcount++;
            } else if (at >= '0' && at <= '9') {
                numbercount++;
            }
        }
        System.out.println("大写字母" + bigcount);
        System.out.println("小写字母" + smallcount);
        System.out.println("数字" + numbercount);
    }
}
//拼接字符串
public class test {
    public static void main(String[] args) {
        //键盘录入一个字符串用Scanner实现
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入字符串");
        String line = sc.nextLine();
        String s = arrayToString(line);
        System.out.println(s);
    }

    public static String arrayToString(String line) {
        String a = "";
        a += "爱你哟";
        a += line;
        a += "加油哦";
        return a;
    }
}

8.2.4StringBuilder字符串的拼接

​ 概述:对字符串进行拼接操作时,每一次拼接都会构造一个新的String对象,产生内存浪费。StringBuilder类就是为此而生的。

​ 概念:StringBuilder是一个可变的字符序列,我们可以将它视作一个容器。这里的可变指的是StringBuilder对象中的内容是可变的。

​ 构造方法:

  • public StringBuilder() 构造一个空的可变的字符串对象,不含有任何内容
  • public StringBuilder(String str) 根据字符串的内容来创建可变的字符串对象。

​ 添加和反转方法

  • public StringBuilder append(任意类型) 添加数据,并返回对象本身
  • public StringBuilder resverse() 返回相反的字符串序列。

转为String用toString()方法即可。转为StringBuilder使用构造方法StringBuilder(String str)

append()方法用于拼接字符串,split(”参数“)方法用于剪切字符串,参数即剪切的标点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值