【Java基础笔记】第十一章 String类
发布时间
阅读量:
阅读量
目录
-
前言
-
第十一章 String类
-
- 11.1 String类概述
-
- 11.1.1 String类的特点
-
11.2 String类对象的创建方法
-
- 方式一:采用直接赋值的方式(推荐方法)
- 这种方法基于字符串引用机制实现。
- 方式一:采用直接赋值的方式(推荐方法)
-
- 方式二:利用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构造器得到字符串对象内存原理

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)
还没有任何评论哟~
