在Java中,字符串由String类的实例表示,其底层基于字符数组存储,提供了完善的方法支持长度获取和字符访问操作,掌握这些基础操作是处理字符串逻辑的前提。

获取字符串长度
String类提供了length()方法用于获取字符串的长度,返回值为int类型,表示字符串中字符的数量。需要注意的是,这里的字符数量指的是Unicode代码单元的数量,大部分常见字符都对应一个代码单元,但部分特殊字符可能会占用两个代码单元。
public class StringLengthDemo {
public static void main(String[] args) {
String str1 = "hello";
// 输出5,字符串包含5个字符
System.out.println(str1.length());
String str2 = "你好Java";
// 输出5,中文和英文都各算一个字符
System.out.println(str2.length());
}
}
访问字符串中的指定字符
要访问字符串中指定位置的字符,可以使用String类的charAt(int index)方法,参数index表示字符的索引位置,索引从0开始,最大为字符串长度减1。如果传入的索引超出范围,会抛出StringIndexOutOfBoundsException异常。
public class CharAtDemo {
public static void main(String[] args) {
String str = "abcdef";
// 获取索引为0的字符,输出a
char firstChar = str.charAt(0);
System.out.println(firstChar);
// 获取索引为3的字符,输出d
char fourthChar = str.charAt(3);
System.out.println(fourthChar);
// 索引超出范围会抛出异常
// str.charAt(6); // 这行代码会抛出StringIndexOutOfBoundsException
}
}
遍历字符串中的所有字符
结合length()方法和charAt()方法,可以遍历字符串中的所有字符,常见的遍历方式有两种,一种是通过普通for循环,另一种是通过增强for循环配合toCharArray()方法。
普通for循环遍历
public class TraverseStringDemo1 {
public static void main(String[] args) {
String str = "test";
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
System.out.println("索引" + i + "的字符是:" + c);
}
}
}
转换为字符数组遍历
String类的toCharArray()方法会将字符串转换为一个字符数组,之后就可以通过遍历数组的方式访问每个字符。
public class TraverseStringDemo2 {
public static void main(String[] args) {
String str = "test";
char[] charArray = str.toCharArray();
for (char c : charArray) {
System.out.println("当前字符:" + c);
}
}
}
注意事项
- 调用
charAt()方法前,最好先判断索引是否在合法范围内,避免抛出索引越界异常。 - 如果字符串中包含emoji等占用两个Unicode代码单元的字符,使用
charAt()方法可能无法正确获取完整字符,此时建议使用codePointAt()方法配合offsetByCodePoints()方法处理。 - String类的实例是不可变的,所有对字符串的修改操作都会返回新的字符串实例,不会影响原字符串的长度和字符内容。
实用技巧示例
下面是一个统计字符串中数字字符数量的示例,结合了长度获取和字符访问的操作:
public class CountDigitDemo {
public static void main(String[] args) {
String str = "abc123def456";
int digitCount = 0;
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
// 判断字符是否为数字
if (c >= '0' && c <= '9') {
digitCount++;
}
}
System.out.println("字符串中数字的数量:" + digitCount);
}
}