Java String类是不可变的字符序列,提供了丰富的字符串操作方法,核心功能包括:创建(字面量、构造方法)、操作(substring截取、concat拼接、replace替换)、比较(equals内容比较、equalsIgnoreCase忽略大小写、compareTo字典序)、查找(indexOf/lastIndexOf索引、contains包含判断)、转换(split分割、trim去空格、toUpperCase/toLowerCase大小写转换)及实用方法(length长度、charAt字符获取、isEmpty判空),其不可变性确保线程安全,字符串常量池优化性能,是Java文本处理的基础,广泛应用于开发场景。
Java String方法详解:核心功能与实用技巧
在Java编程中,String类是最常用的引用类型之一,它代表不可变的字符序列,无论是简单的文本处理、数据传输还是复杂的业务逻辑实现,String方法都扮演着至关重要的角色,本文将系统介绍String类的核心方法,包括其功能、语法、使用示例及注意事项,帮助开发者深入掌握这一基础工具。
字符串创建与比较
字符串创建
String对象的创建方式主要有两种:
字面量创建
Java会使用字符串常量池进行优化,相同字面量的String对象不会重复创建。
String str1 = "Hello"; String str2 = "Hello"; // str1和str2指向常量池中同一对象 System.out.println(str1 == str2); // 输出true
new关键字创建
每次都会在堆内存中创建新的对象,即使内容相同。
String str3 = new String("Hello"); // str3与str1、str2是不同对象
System.out.println(str1 == str3); // 输出false
字符串比较
String提供了多种比较方法,需根据场景选择:
equals()与equalsIgnoreCase()
equals():比较字符串内容是否完全相同(区分大小写)。equalsIgnoreCase():比较字符串内容是否相同(忽略大小写)。
String str1 = "Java"; String str2 = "java"; System.out.println(str1.equals(str2)); // false System.out.println(str1.equalsIgnoreCase(str2)); // true
compareTo()与compareToIgnoreCase()
compareTo():按字典顺序比较两个字符串,返回差值(str1 > str2返回正数,str1 < str2返回负数,相等返回0)。compareToIgnoreCase():忽略大小写的字典序比较。
String str3 = "Apple"; String str4 = "Banana"; System.out.println(str3.compareTo(str4)); // -1('A'的ASCII码小于'B')
与equals()的区别
- 比较的是两个对象的内存地址(是否为同一对象)。
equals():比较的是字符串内容(String类重写了Object的equals方法)。
String str5 = "hello";
String str6 = new String("hello");
System.out.println(str5 == str6); // false(地址不同)
System.out.println(str5.equals(str6)); // true(内容相同)
字符串查找与获取
获取长度与字符
length():返回字符串长度(字符个数)。charAt(int index):获取指定索引处的字符(索引从0开始)。
String str = "Hello World"; System.out.println(str.length()); // 11 System.out.println(str.charAt(0)); // 'H' System.out.println(str.charAt(4)); // 'o'
查找字符/子串位置
indexOf():查找字符或子串首次出现的索引,若不存在返回-1。lastIndexOf():查找字符或子串最后一次出现的索引。
String str = "Hello World";
System.out.println(str.indexOf('o')); // 4
System.out.println(str.indexOf("World")); // 6
System.out.println(str.indexOf('x')); // -1
System.out.println(str.lastIndexOf('o')); // 7
截取子串
substring(int beginIndex):从beginIndex截取到字符串末尾。substring(int beginIndex, int endIndex):截取[beginIndex, endIndex)范围内的子串(左闭右开)。
String str = "Hello World"; System.out.println(str.substring(6)); // "World" System.out.println(str.substring(0, 5)); // "Hello"
字符串修改与拼接
拼接字符串
concat(String str):在原字符串末尾拼接指定字符串(返回新字符串,原字符串不变)。- 运算符:Java支持用拼接字符串,底层会自动转换为
StringBuilder(推荐使用,更简洁高效)。
String str1 = "Java";
String str2 = str1.concat(" is fun");
System.out.println(str2); // "Java is fun"
System.out.println(str1); // "Java"(原字符串不变)
String str3 = "Hello" + " " + "World"; // "Hello World"
性能提示:在循环或大量字符串拼接时,应优先使用StringBuilder而非运算符,因为在每次拼接时都会创建新的StringBuilder对象。
替换字符/子串
replace(char oldChar, char newChar):替换所有指定字符。replace(CharSequence target, CharSequence replacement):替换所有匹配的子串(支持字符序列)。
String str = "Hello Java";
System.out.println(str.replace('a', 'A')); // "Hello JAva"
System.out.println(str.replace("Java", "Python")); // "Hello Python"
其他常用方法
去除空白字符
trim():去除字符串两端的空白字符(包括空格、制表符、换行符等)。
String str = " Hello World "; System.out.println(str.trim()); // "Hello World"
分割字符串
split(String regex):根据正则表达式分割字符串。
String str = "apple,banana,orange";
String[] fruits = str.split(",");
for (String fruit : fruits) {
System.out.println(fruit);
}
连接字符串
join(CharSequence delimiter, CharSequence... elements):使用指定的分隔符连接多个字符串。
String result = String.join(", ", "apple", "banana", "orange");
System.out.println(result); // "apple, banana, orange"
格式化字符串
format(String format, Object... args):使用格式化字符串和参数创建格式化字符串。
String formatted = String.format("姓名: %s, 年龄: %d", "张三", 25);
System.out.println(formatted); // "姓名: 张三, 年龄: 25"
实用技巧与最佳实践
- 避免使用进行大量字符串拼接:在循环或大量字符串拼接时,应使用
StringBuilder以提高性能。
// 不推荐
String result = "";
for (int i = 0; i < 1000; i++) {
result += "a";
}
// 推荐
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append("a");
}
String result = sb.toString();
- 使用
String.join()进行数组/列表拼接:比循环使用更简洁高效。
List<String> names = Arrays.asList("张三", "李四", "王五");
String result = String.join(", ",