Appearance
13.2 字符串常用方法
字符串长度方法
length()
功能:返回字符串的长度
语法:int length()
示例:
java
String str = "Hello, Java!";
int length = str.length(); // 12
System.out.println("字符串长度: " + length);字符串查找方法
charAt(int index)
功能:返回指定索引位置的字符
语法:char charAt(int index)
示例:
java
String str = "Hello";
char firstChar = str.charAt(0); // 'H'
char lastChar = str.charAt(str.length() - 1); // 'o'
System.out.println("第一个字符: " + firstChar);
System.out.println("最后一个字符: " + lastChar);indexOf(int ch)
功能:返回指定字符第一次出现的索引
语法:int indexOf(int ch)
示例:
java
String str = "Hello, Java!";
int index = str.indexOf('o'); // 4
System.out.println("字符 'o' 的位置: " + index);indexOf(int ch, int fromIndex)
功能:从指定索引开始,返回指定字符第一次出现的索引
语法:int indexOf(int ch, int fromIndex)
示例:
java
String str = "Hello, Java!";
int index = str.indexOf('o', 5); // 9
System.out.println("从索引 5 开始,字符 'o' 的位置: " + index);indexOf(String str)
功能:返回指定字符串第一次出现的索引
语法:int indexOf(String str)
示例:
java
String str = "Hello, Java!";
int index = str.indexOf("Java"); // 7
System.out.println("字符串 'Java' 的位置: " + index);indexOf(String str, int fromIndex)
功能:从指定索引开始,返回指定字符串第一次出现的索引
语法:int indexOf(String str, int fromIndex)
示例:
java
String str = "Hello, Java Java!";
int index = str.indexOf("Java", 8); // 12
System.out.println("从索引 8 开始,字符串 'Java' 的位置: " + index);lastIndexOf(int ch)
功能:返回指定字符最后一次出现的索引
语法:int lastIndexOf(int ch)
示例:
java
String str = "Hello, Java!";
int index = str.lastIndexOf('a'); // 9
System.out.println("字符 'a' 最后出现的位置: " + index);lastIndexOf(String str)
功能:返回指定字符串最后一次出现的索引
语法:int lastIndexOf(String str)
示例:
java
String str = "Hello, Java Java!";
int index = str.lastIndexOf("Java"); // 12
System.out.println("字符串 'Java' 最后出现的位置: " + index);contains(CharSequence s)
功能:判断字符串是否包含指定的字符序列
语法:boolean contains(CharSequence s)
示例:
java
String str = "Hello, Java!";
boolean contains = str.contains("Java"); // true
System.out.println("是否包含 'Java': " + contains);startsWith(String prefix)
功能:判断字符串是否以指定的前缀开始
语法:boolean startsWith(String prefix)
示例:
java
String str = "Hello, Java!";
boolean startsWith = str.startsWith("Hello"); // true
System.out.println("是否以 'Hello' 开始: " + startsWith);endsWith(String suffix)
功能:判断字符串是否以指定的后缀结束
语法:boolean endsWith(String suffix)
示例:
java
String str = "Hello, Java!";
boolean endsWith = str.endsWith("!"); // true
System.out.println("是否以 '!' 结束: " + endsWith);字符串截取方法
substring(int beginIndex)
功能:从指定索引开始,截取到字符串末尾
语法:String substring(int beginIndex)
示例:
java
String str = "Hello, Java!";
String subStr = str.substring(7); // "Java!"
System.out.println("截取结果: " + subStr);substring(int beginIndex, int endIndex)
功能:从指定索引开始,截取到指定索引结束(不包含结束索引)
语法:String substring(int beginIndex, int endIndex)
示例:
java
String str = "Hello, Java!";
String subStr = str.substring(0, 5); // "Hello"
System.out.println("截取结果: " + subStr);字符串修改方法
concat(String str)
功能:连接指定字符串到原字符串末尾
语法:String concat(String str)
示例:
java
String str1 = "Hello";
String str2 = " Java";
String result = str1.concat(str2); // "Hello Java"
System.out.println("连接结果: " + result);replace(char oldChar, char newChar)
功能:替换字符串中的指定字符
语法:String replace(char oldChar, char newChar)
示例:
java
String str = "Hello, Java!";
String replaced = str.replace('o', 'O'); // "HellO, Java!"
System.out.println("替换结果: " + replaced);replace(CharSequence target, CharSequence replacement)
功能:替换字符串中的指定字符序列
语法:String replace(CharSequence target, CharSequence replacement)
示例:
java
String str = "Hello, Java!";
String replaced = str.replace("Java", "World"); // "Hello, World!"
System.out.println("替换结果: " + replaced);replaceAll(String regex, String replacement)
功能:使用正则表达式替换字符串中的指定内容
语法:String replaceAll(String regex, String replacement)
示例:
java
String str = "Hello, Java 123!";
String replaced = str.replaceAll("\\d+", "456"); // "Hello, Java 456!"
System.out.println("替换结果: " + replaced);replaceFirst(String regex, String replacement)
功能:使用正则表达式替换字符串中第一次出现的指定内容
语法:String replaceFirst(String regex, String replacement)
示例:
java
String str = "Hello, Java Java!";
String replaced = str.replaceFirst("Java", "World"); // "Hello, World Java!"
System.out.println("替换结果: " + replaced);字符串分割方法
split(String regex)
功能:根据正则表达式分割字符串
语法:String[] split(String regex)
示例:
java
String str = "apple,banana,orange";
String[] fruits = str.split(","); // ["apple", "banana", "orange"]
for (String fruit : fruits) {
System.out.println(fruit);
}split(String regex, int limit)
功能:根据正则表达式分割字符串,限制分割次数
语法:String[] split(String regex, int limit)
示例:
java
String str = "apple,banana,orange,grape";
String[] fruits = str.split(",", 2); // ["apple", "banana,orange,grape"]
for (String fruit : fruits) {
System.out.println(fruit);
}字符串大小写转换方法
toUpperCase()
功能:将字符串转换为大写
语法:String toUpperCase()
示例:
java
String str = "Hello, Java!";
String upperCase = str.toUpperCase(); // "HELLO, JAVA!"
System.out.println("大写结果: " + upperCase);toLowerCase()
功能:将字符串转换为小写
语法:String toLowerCase()
示例:
java
String str = "Hello, Java!";
String lowerCase = str.toLowerCase(); // "hello, java!"
System.out.println("小写结果: " + lowerCase);字符串修剪方法
trim()
功能:去除字符串前后的空白字符
语法:String trim()
示例:
java
String str = " Hello, Java! ";
String trimmed = str.trim(); // "Hello, Java!"
System.out.println("修剪结果: '" + trimmed + "'");strip()
功能:去除字符串前后的空白字符(Java 11+)
语法:String strip()
示例:
java
String str = " Hello, Java! ";
String stripped = str.strip(); // "Hello, Java!"
System.out.println("修剪结果: '" + stripped + "'");stripLeading()
功能:去除字符串开头的空白字符(Java 11+)
语法:String stripLeading()
示例:
java
String str = " Hello, Java! ";
String stripped = str.stripLeading(); // "Hello, Java! "
System.out.println("修剪结果: '" + stripped + "'");stripTrailing()
功能:去除字符串结尾的空白字符(Java 11+)
语法:String stripTrailing()
示例:
java
String str = " Hello, Java! ";
String stripped = str.stripTrailing(); // " Hello, Java!"
System.out.println("修剪结果: '" + stripped + "'");字符串判断方法
isEmpty()
功能:判断字符串是否为空
语法:boolean isEmpty()
示例:
java
String str1 = "";
String str2 = "Hello";
System.out.println("str1 是否为空: " + str1.isEmpty()); // true
System.out.println("str2 是否为空: " + str2.isEmpty()); // falseisBlank()
功能:判断字符串是否为空或只包含空白字符(Java 11+)
语法:boolean isBlank()
示例:
java
String str1 = "";
String str2 = " ";
String str3 = "Hello";
System.out.println("str1 是否为空白: " + str1.isBlank()); // true
System.out.println("str2 是否为空白: " + str2.isBlank()); // true
System.out.println("str3 是否为空白: " + str3.isBlank()); // false字符串其他方法
toCharArray()
功能:将字符串转换为字符数组
语法:char[] toCharArray()
示例:
java
String str = "Hello";
char[] charArray = str.toCharArray(); // ['H', 'e', 'l', 'l', 'o']
for (char c : charArray) {
System.out.println(c);
}getBytes()
功能:将字符串转换为字节数组
语法:byte[] getBytes()
示例:
java
String str = "Hello";
byte[] byteArray = str.getBytes(); // [72, 101, 108, 108, 111]
for (byte b : byteArray) {
System.out.println(b);
}valueOf(Object obj)
功能:将对象转换为字符串
语法:static String valueOf(Object obj)
示例:
java
int num = 123;
String str = String.valueOf(num); // "123"
System.out.println("转换结果: " + str);
boolean flag = true;
String str2 = String.valueOf(flag); // "true"
System.out.println("转换结果: " + str2);format(String format, Object... args)
功能:使用指定的格式字符串和参数创建格式化的字符串
语法:static String format(String format, Object... args)
示例:
java
String name = "John";
int age = 30;
double salary = 5000.50;
String str = String.format("Name: %s, Age: %d, Salary: %.2f", name, age, salary);
System.out.println("格式化结果: " + str); // "Name: John, Age: 30, Salary: 5000.50"join(CharSequence delimiter, CharSequence... elements)
功能:使用指定的分隔符连接多个字符串
语法:static String join(CharSequence delimiter, CharSequence... elements)
示例:
java
String[] fruits = {"apple", "banana", "orange"};
String str = String.join(", ", fruits); // "apple, banana, orange"
System.out.println("连接结果: " + str);示例:字符串常用方法综合使用
示例 1:字符串处理
java
public class StringMethodsExample {
public static void main(String[] args) {
String str = " Hello, Java World! ";
System.out.println("原始字符串: '" + str + "'");
System.out.println("字符串长度: " + str.length());
System.out.println("修剪后: '" + str.trim() + "'");
System.out.println("大写: " + str.toUpperCase());
System.out.println("小写: " + str.toLowerCase());
System.out.println("是否包含 'Java': " + str.contains("Java"));
System.out.println("是否以 'Hello' 开始: " + str.startsWith("Hello"));
System.out.println("是否以 '!' 结束: " + str.endsWith("!"));
System.out.println("字符 'o' 第一次出现的位置: " + str.indexOf('o'));
System.out.println("字符 'o' 最后一次出现的位置: " + str.lastIndexOf('o'));
System.out.println("子串 (7, 11): '" + str.substring(7, 11) + "'");
System.out.println("替换 'Java' 为 'Python': " + str.replace("Java", "Python"));
// 分割字符串
String fruits = "apple,banana,orange,grape";
String[] fruitArray = fruits.split(",");
System.out.println("分割结果:");
for (int i = 0; i < fruitArray.length; i++) {
System.out.println("[" + i + "]: " + fruitArray[i]);
}
// 连接字符串
String joined = String.join(" - ", fruitArray);
System.out.println("连接结果: " + joined);
// 格式化字符串
String name = "Alice";
int score = 95;
String formatted = String.format("%s 的得分是 %d 分", name, score);
System.out.println("格式化结果: " + formatted);
}
}示例 2:字符串验证
java
public class StringValidationExample {
public static void main(String[] args) {
String[] emails = {
"user@example.com",
"invalid-email",
"user@",
"@example.com"
};
for (String email : emails) {
System.out.println("邮箱: " + email);
System.out.println("是否有效: " + isValidEmail(email));
System.out.println();
}
}
public static boolean isValidEmail(String email) {
if (email == null || email.isEmpty()) {
return false;
}
// 检查是否包含 @ 符号
if (!email.contains("@")) {
return false;
}
// 检查 @ 符号的位置
int atIndex = email.indexOf('@');
if (atIndex == 0 || atIndex == email.length() - 1) {
return false;
}
// 检查 @ 符号后是否包含 . 符号
String domain = email.substring(atIndex + 1);
if (!domain.contains(".")) {
return false;
}
return true;
}
}示例 3:字符串反转
java
public class StringReverseExample {
public static void main(String[] args) {
String str = "Hello, Java!";
System.out.println("原始字符串: " + str);
System.out.println("反转后: " + reverseString(str));
}
public static String reverseString(String str) {
// 方法 1:使用 StringBuilder
StringBuilder sb = new StringBuilder(str);
return sb.reverse().toString();
// 方法 2:使用 charArray
/*
char[] charArray = str.toCharArray();
int left = 0;
int right = charArray.length - 1;
while (left < right) {
char temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
left++;
right--;
}
return new String(charArray);
*/
}
}常见问题
1. 字符串索引越界
症状:StringIndexOutOfBoundsException
解决方案:在使用 charAt()、substring() 等方法时,确保索引在有效范围内
示例:
java
String str = "Hello";
// 错误:索引越界
// char c = str.charAt(10);
// 正确:检查索引范围
if (index >= 0 && index < str.length()) {
char c = str.charAt(index);
}2. 字符串比较错误
症状:使用 == 比较字符串内容
解决方案:使用 equals() 方法比较字符串内容
示例:
java
String str1 = "Hello";
String str2 = new String("Hello");
// 错误:比较引用
// if (str1 == str2) {
// 正确:比较内容
if (str1.equals(str2)) {
// 代码
}3. 字符串拼接性能
症状:大量字符串拼接导致性能下降
解决方案:使用 StringBuilder 或 StringBuffer
示例:
java
// 错误:大量字符串拼接
String result = "";
for (int i = 0; i < 1000; i++) {
result += i;
}
// 正确:使用 StringBuilder
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
sb.append(i);
}
String result = sb.toString();4. 字符串空值检查
症状:NullPointerException
解决方案:在使用字符串方法前,检查字符串是否为 null
示例:
java
String str = null;
// 错误:可能导致 NullPointerException
// if (str.equals("Hello")) {
// 正确:先检查 null
if (str != null && str.equals("Hello")) {
// 代码
}
// 正确:常量放在前面
if ("Hello".equals(str)) {
// 代码
}最佳实践
使用合适的方法:根据具体需求选择合适的字符串方法
注意索引范围:使用索引相关方法时,确保索引在有效范围内
使用 equals() 比较:使用
equals()方法比较字符串内容,而不是==运算符使用 StringBuilder:对于大量字符串拼接操作,使用
StringBuilder或StringBuffer检查 null 值:在使用字符串方法前,检查字符串是否为 null
合理使用正则表达式:使用
replaceAll()和split()方法时,注意正则表达式的性能了解方法的返回值:了解字符串方法的返回值,特别是不可变方法的返回值
使用 Java 11+ 的新方法:如果使用 Java 11 或更高版本,考虑使用
strip()、isBlank()等新方法
总结
Java 中的 String 类提供了丰富的方法用于操作字符串,包括:
长度方法:
length()查找方法:
charAt(),indexOf(),lastIndexOf(),contains(),startsWith(),endsWith()截取方法:
substring()修改方法:
concat(),replace(),replaceAll(),replaceFirst()分割方法:
split()大小写转换方法:
toUpperCase(),toLowerCase()修剪方法:
trim(),strip(),stripLeading(),stripTrailing()判断方法:
isEmpty(),isBlank()其他方法:
toCharArray(),getBytes(),valueOf(),format(),join()
通过合理使用这些方法,可以有效地处理和操作字符串,提高代码的可读性和性能。
