在 Java 中,String
类是最常用的类之一,用于表示和操作字符串。由于字符串在编程中无处不在,掌握 String
类的常用方法对于编写高效、可维护的代码至关重要。本文将深入探讨 Java 中 String
类的常用方法,并通过示例代码展示它们的用法,帮助你更好地理解和使用这些方法。
1. String 类简介
String
类是 Java 标准库中的一个核心类,用于表示不可变的字符序列。由于字符串是不可变的,任何对字符串的修改操作都会返回一个新的字符串对象,而不会改变原始字符串。
1.1 创建字符串
在 Java 中,创建字符串的常见方式有两种:
// 方式 1:使用字符串字面量
String str1 = "Hello, World!";
// 方式 2:使用 new 关键字
String str2 = new String("Hello, World!");
- 字符串字面量:字符串字面量会被存储在字符串常量池中,如果内容相同,多个变量可以共享同一个字符串对象。
new
关键字:每次使用new
关键字都会创建一个新的字符串对象,即使内容相同。
2. String 类的常用方法
2.1 获取字符串信息
2.1.1 length()
:获取字符串长度
String str = "Hello, World!";
int length = str.length(); // 返回 13
2.1.2 isEmpty()
:判断字符串是否为空
String str = "";
boolean isEmpty = str.isEmpty(); // 返回 true
2.1.3 charAt(int index)
:获取指定位置的字符
String str = "Hello";
char ch = str.charAt(1); // 返回 'e'
2.2 字符串比较
2.2.1 equals(Object obj)
:比较字符串内容
String str1 = "Hello";
String str2 = "hello";
boolean isEqual = str1.equals(str2); // 返回 false(区分大小写)
2.2.2 equalsIgnoreCase(String str)
:忽略大小写比较
boolean isEqualIgnoreCase = str1.equalsIgnoreCase(str2); // 返回 true
2.2.3 compareTo(String str)
:按字典顺序比较
String str1 = "apple";
String str2 = "banana";
int result = str1.compareTo(str2); // 返回负数("apple" 在 "banana" 之前)
2.3 字符串查找
2.3.1 indexOf(String str)
:查找子字符串的位置
String str = "Hello, World!";
int index = str.indexOf("World"); // 返回 7
2.3.2 lastIndexOf(String str)
:从后向前查找子字符串
int lastIndex = str.lastIndexOf("o"); // 返回 8
2.3.3 contains(CharSequence s)
:判断是否包含子字符串
boolean contains = str.contains("Hello"); // 返回 true
2.4 字符串截取与分割
2.4.1 substring(int beginIndex)
:从指定位置截取字符串
String str = "Hello, World!";
String subStr = str.substring(7); // 返回 "World!"
2.4.2 substring(int beginIndex, int endIndex)
:截取指定范围的字符串
String subStr2 = str.substring(0, 5); // 返回 "Hello"
2.4.3 split(String regex)
:按正则表达式分割字符串
String str = "apple,banana,orange";
String[] fruits = str.split(","); // 返回 ["apple", "banana", "orange"]
2.5 字符串修改
2.5.1 toLowerCase()
:转换为小写
String str = "Hello, World!";
String lowerCaseStr = str.toLowerCase(); // 返回 "hello, world!"
2.5.2 toUpperCase()
:转换为大写
String upperCaseStr = str.toUpperCase(); // 返回 "HELLO, WORLD!"
2.5.3 trim()
:去除首尾空白字符
String str = " Hello, World! ";
String trimmedStr = str.trim(); // 返回 "Hello, World!"
2.5.4 replace(char oldChar, char newChar)
:替换字符
String replacedStr = str.replace('o', '0'); // 返回 "Hell0, W0rld!"
2.5.5 replaceAll(String regex, String replacement)
:替换所有匹配的子字符串
String replacedAllStr = str.replaceAll("o", "0"); // 返回 "Hell0, W0rld!"
2.6 字符串拼接
2.6.1 concat(String str)
:拼接字符串
String str1 = "Hello";
String str2 = "World";
String result = str1.concat(" ").concat(str2); // 返回 "Hello World"
2.6.2 使用 +
操作符拼接
String result = str1 + " " + str2; // 返回 "Hello World"
2.6.3 使用 StringBuilder
或 StringBuffer
高效拼接
StringBuilder sb = new StringBuilder();
sb.append("Hello").append(" ").append("World");
String result = sb.toString(); // 返回 "Hello World"
2.7 其他常用方法
2.7.1 startsWith(String prefix)
:判断是否以指定前缀开头
boolean startsWith = str.startsWith("Hello"); // 返回 true
2.7.2 endsWith(String suffix)
:判断是否以指定后缀结尾
boolean endsWith = str.endsWith("World!"); // 返回 true
2.7.3 matches(String regex)
:判断是否匹配正则表达式
boolean matches = str.matches(".*World.*"); // 返回 true
3. 字符串的不可变性
Java 中的字符串是不可变的,这意味着一旦创建了一个字符串对象,它的内容就不能被修改。任何对字符串的修改操作都会返回一个新的字符串对象。
3.1 不可变性的优点
- 线程安全:字符串可以在多线程环境中安全共享。
- 缓存哈希值:字符串的哈希值可以缓存,提高性能。
- 安全性:字符串常用于存储敏感信息(如密码),不可变性可以防止意外修改。
3.2 不可变性的缺点
- 频繁修改字符串会导致大量临时对象的创建,增加内存开销。
3.3 解决方案
对于需要频繁修改字符串的场景,可以使用 StringBuilder
(非线程安全)或 StringBuffer
(线程安全)。
4. 性能优化建议
- 避免频繁拼接字符串:使用
StringBuilder
或StringBuffer
代替+
操作符。 - 使用
equals()
比较字符串内容:避免使用==
比较字符串。 - 合理使用字符串常量池:尽量使用字符串字面量创建字符串,减少内存开销。
- 注意正则表达式的性能:复杂的正则表达式可能导致性能问题。
5. 总结
String
类是 Java 中最常用的类之一,掌握其常用方法对于编写高效、可维护的代码至关重要。本文详细介绍了 String
类的常用方法,包括字符串的创建、比较、查找、修改、拼接等操作,并提供了性能优化建议。希望本文能帮助你更好地理解和使用 String
类,提升编程效率!