Advertisement

【Java基础笔记】第十一章 String类

阅读量:

目录

  • 前言

  • 第十一章 String类

    • 11.1 String类概述
      • 11.1.1 String类的特点
  • 11.2 String类对象的创建方法

    • 方式一:采用直接赋值的方式(推荐方法)
      • 这种方法基于字符串引用机制实现。
    • 方式二:利用String类提供的构造方法生成对象
      • 这种方法通常涉及调用无参数静态初始化方法。
  • 比较这两种不同实现路径的关键区别在于:

    • 方式一依赖于简单的赋值操作完成。
    • 而方式二则采用了基于新关键字初始化的方法。

String类案例1

案例一

前言

这篇文章是关于Java基础自学的笔记。其他内容:Java基础学习笔记目录 学习资料: 《Java核心技术 卷Ⅰ 基础知识(第10版)》 《Java经典编程300例》

第十一章 String类

11.1 String类概述

  • 代表字符串数据类型的Java.lang.String类在其成员变量中可被赋值为指向相应字符串对象的引用。
  • 其成员变量可被赋值为指向相应字符串对象的引用。
  • 进而可对其内容执行各种操作。
  • 在Java程序中使用的所有字符串均为其对应的String对象类型实例。

11.1.1 String类的特点

  • String也被认为是不可变字符串类型的一种表现形式,在创建后这些对象无法被修改

  • 每次对String变量进行修改操作都会生成并指向一个新的字符串实例

  • 这些原始的对象并未发生任何变化

    • 以" "方式给出的字符串对象,在字符串常量池中存储

11.2 String类创建对象的两种方式

11.2.1 方式一:直接使用“ ”定义(推荐方式)

复制代码
    	String str = "abc";
    
    
      
    
    代码解释

11.2.2 通过" "定义字符串内存原理

通过" "定义字符串内存原理

11.2.3 方式二:通过String类的构造器创建对象

构造器 说明
public String() 创建一个空白字符串对象,不含有任何内容
public String( String original) 根据传入的字符串内容,创建字符串对象
public String( char[] chs) 根据字符数组的内容,创建字符串对象
public String( byte[] chs) 根据字节数字的内容,创建字符串对象

11.2.4 通过new构造器得到字符串对象内存原理

通过new构造器得到字符串对象内存原理

11.2.5 两种方式的区别

通过 ' ' 方式给出的字符串对象,在字符串常量池中存入,并且对于相同内容仅会存在一份记录

复制代码
    	String s1 = "abc";
    	String s2 = "abc";
    	System.out.println(s1 == s2); // true
    
    
      
      
      
    
    代码解释
  • 通过构造器new对象,每new一次都会产生一个新对象,放在堆内存中
复制代码
    	String s3 = new String("abc");
    	String s4 = new String("abc");
    	System.out.println(s3 == s4); // false
    
    
      
      
      
    
    代码解释

11.3 String类常见面试题

复制代码
    	String s1 = new String("abc"); // 实际上创建了两个对象
    	String s2 = "abc";
    	System.out.println(s1 == s2); //fasle
    
    
      
      
      
    
    代码解释
复制代码
    	String s1 = "abc";
    	String s2 = "ab";
    	String s3 = s2 + "c";
    	System.out.println(s1 == s3); // false
    
    
      
      
      
      
    
    代码解释
复制代码
    	String s1 = "abc";
    	// Java存在变异优化机制,程序在编译时:"a" + "b" + "c"会直接转成"abc"
    	String s2 = "a" + "b" + "c"; 
    	System.out.println(s1 == s2); // true
    
    
      
      
      
      
    
    代码解释

11.4 String类常用API——字符串内容比较

  • 推荐使用String类提供的equals()方法比较: 只比较内容是否一致
方法名 说明
public boolean equals(Object anObject) 将此字符串与指定内容进行比较,只比较内容是否一致
public boolean equalsIgnoreCase(String anotherString) 将此字符串与指定对象进行比较,忽略大小写比较字符串,只比较内容是否一致
****

11.5 String类常用API——遍历、替换、截取、分割

方法名 说明
public int length() 返回此字符串的长度
public char charAt(int index) 获取某个索引位置处的字符
public char[] toCharArray() 将当前字符串转换成字符数组返回
public String substring(int beginIndex, int endIndex) 根据开始和结束索引进行截取,得到新的字符串**(包前不包后)**
public String substring(int beginIndex) 从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(charSequence target, CharSequence replacement) 使用新值,将字符串中的旧值替换,得到新的字符串
public String[] split(String regex) 根据传入的规则切割字符串,得到字符串数组返回
****
复制代码
    	System.out.println(("abc".substring(0,1))); // a(索引:包前不包后)
    
    
      
    
    代码解释

【String类案例1】生成验证码

生成验证码
  • 需求: * 随机产生一个5位验证码,每位可能是数字、大写字母、小写字母

分析:创建一个String类型的变量用于验证所有字符(包括数字、字母),然后被随机选择一个范围内的索引被获取并将其组合成字符串。

复制代码
    	public static void main(String[] args) {
        Random r = new Random();
        String code = "";
        String str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
        for (int i = 0; i < 5; i++) {
            int index = r.nextInt(str.length());
            code += str.charAt(index);
        }
        System.out.println("验证码:"+code);
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("请输入验证码:");
            String input = sc.next();
            if (input.equalsIgnoreCase(code)) {
                System.out.println("验证码输入正确!");
                break;
            } else {
                System.out.println("验证码输入错误!请重新输入");
            }
        }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释
复制代码
    验证码:ofD9l
    请输入验证码:ofd9i
    验证码输入错误!请重新输入
    请输入验证码:ofd9l
    验证码输入正确!
    
    
      
      
      
      
      
    
    代码解释

【String类案例2】模拟用户登录功能

模拟用户登录功能
  • 需求: * 模拟用户登录功能,最多只给三次机会

  • 分析: * 系统后台配置标准的账号和密码。

  • 通过循环机制控制用户最多三次的输入尝试。每次用户输入正确的账号和密码后会记录成功;若判定为 登录 成功,则无需再次 login。

  • 在 login 失败时显示提示信息并允许用户继续尝试。

复制代码
    	public static void main(String[] args) {
        String id = "admin";
        String password = "123456";
        Scanner sc = new Scanner(System.in);
        for (int i = 2; i >= 0; i--) {
            System.out.print("请输入用户名:");
            String inputID = sc.next();
            System.out.print("请输入密码:");
            String inputPassword = sc.next();
            if (inputID.equals(id) && inputPassword.equals(password)) {
                System.out.println("登录成功!");
                break;
            } else {
                System.out.println("用户名或密码错误!您还有" + i + "次机会");
            }
        }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释
复制代码
    请输入用户名:admin
    请输入密码:1234
    用户名或密码错误!您还有2次机会
    请输入用户名:admin
    请输入密码:12345
    用户名或密码错误!您还有1次机会
    请输入用户名:admin
    请输入密码:123456
    登录成功!
    
    
      
      
      
      
      
      
      
      
      
    
    代码解释

【String类案例3】手机号码屏蔽

请编写程序以从键盘接收一个手机号字符串,并在其中移除中间四位数字,最终输出结果为仅显示第一位和最后一位。

手机号码屏蔽
  • 分析: * 通过键盘输入一个字符串并使用Scanner类来实现
  • 提取字符串的前三个字符和剩余的最后四个字符
  • 将这两个部分连接起来,并在两者之间插入四个星号符以完成拼接操作
复制代码
    	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("请输入手机号码:");
            String telNumber = sc.next();
            if (telNumber.length() == 11) {
                String front = telNumber.substring(0, 3); // 取手机号前三位
                String behind = telNumber.substring(7); // 取手机号后四位
                System.out.println(front + "****" + behind);
                break;
            } else {
                System.out.println("请输入正确的手机号码!");
            }
        }
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解释
复制代码
    请输入手机号码:1581111123
    请输入正确的手机号码!
    请输入手机号码:15811111234
    158****1234
    
    
      
      
      
      
    
    代码解释

全部评论 (0)

还没有任何评论哟~