Java复习Day18

发布于:2025-05-27 ⋅ 阅读:(38) ⋅ 点赞:(0)

String 字符串类复习笔记

1. 简介

  • String 类是引用类型,不是基本数据类型
  • 表示不可变的 Unicode 字符序列,初始化后内容不可更改
  • 被 final 修饰,不能有子类

2. 创建方式

静态创建

String str = "abc";
在方法区常量池创建唯一字符串对象,相同字符串的引用变量地址相同。

动态创建

String str = new String("abc");
在堆内存创建新对象,共产生两个对象。

3. 构造方法

  • new String();
  • new String("abc");
  • new String(char[]);
  • new String(char[], int offset, int length);
  • new String(byte[]);
  • new String(byte[], int offset, int length);

4. 连接操作符

String str = "abc";
String str1 = "def";
String str2 = "abcdef";

System.out.println(str2 == str + str1);  // false - 变量相加会先创建新对象
System.out.println(str2 == "abc" + "def");  // true - 直接拼接后查找常量池
System.out.println(str2.equals(str + str1));  // true
System.out.println(str2.equals("abc" + "def"));  // true

5. 常用方法

基本信息

  • length():返回字符串长度
  • equals(String):比较字符串内容
  • equalsIgnoreCase(String):不区分大小写比较内容

查找方法

  • indexOf(int/String):查找首次出现位置,不存在返回-1
  • indexOf(int/String, int fromIndex):从指定位置开始查找
  • lastIndexOf(int/String):查找最后一次出现位置
  • lastIndexOf(int/String, int fromIndex):从指定位置反向查找

6. 案例:邮箱验证

public class CheckEmail {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println("请输入email地址");
            String email = scanner.next();
            if (validateEmail(email)) {
                System.out.println("有效的email地址");
                break;
            }
            System.out.println("无效的email地址");
        }
    }
    
    public static boolean validateEmail(String email) {
        int at = email.indexOf("@");
        int lastAt = email.lastIndexOf("@");
        int dot = email.lastIndexOf(".");
        return at != -1 
            && at == lastAt 
            && dot > at + 1 
            && dot != email.length() - 1;
    }
}

其他方法

  • toUpperCase()/toLowerCase():大小写转换
  • charAt(int):获取指定位置字符
  • substring(int)/substring(int,int):字符串截取
  • trim():去除前后空格
  • concat(String):字符串连接
  • getBytes()/toCharArray():转换为字节/字符数组
  • contains(String):判断是否包含子串
  • startsWith(String)/endsWith(String):判断开始/结尾
  • replace()/replaceAll():字符串替换
  • split(String):按正则分割字符串
  • matches(String):正则匹配

7. 验证码案例

public class CheckCode {
    public static void main(String[] args) {
        String code = generateCode(4);
        System.out.println(code);
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入验证码");
        String userInput = scanner.next();
        System.out.println(code.equalsIgnoreCase(userInput) 
            ? "验证码正确" : "验证码错误");
    }
    
    public static String generateCode(int length) {
        String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        StringBuilder code = new StringBuilder();
        for (int i = 0; i < length; i++) {
            int index = (int)(Math.random() * chars.length());
            code.append(chars.charAt(index));
        }
        return code.toString();
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到