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)
:查找首次出现位置,不存在返回-1indexOf(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();
}
}