杰瑞科技汇

Java字符串下标从0开始吗?

字符串是字符的序列

在 Java 中,一个 String 对象可以被看作是一个字符的序列,每个字符在这个序列中都有一个固定的位置,这个位置就是它的下标索引

Java字符串下标从0开始吗?-图1
(图片来源网络,侵删)
  • 索引从 0 开始:这是编程语言中一个非常普遍的约定,第一个字符的索引是 0,第二个是 1,以此类推。
  • 最后一个字符的索引是 length() - 1:如果一个字符串的长度是 n,那么它的有效索引范围是 0n-1

如何获取字符串的长度?

在操作下标之前,我们通常需要知道字符串的长度,以避免越界错误,使用 String 类的 length() 方法。

String str = "Hello, World!";
int length = str.length(); // length 的值是 13

如何通过下标访问字符?

Java 提供了 charAt(int index) 方法来获取指定下标处的字符。

语法

public char charAt(int index)
  • index: 你想要获取的字符的下标。
  • 返回值: 一个 char 类型的字符。

示例

String greeting = "你好,世界!";
// 获取第一个字符
char firstChar = greeting.charAt(0); // '你'
// 获取第三个字符
char thirdChar = greeting.charAt(2); // '世'
// 获取最后一个字符
int lastIndex = greeting.length() - 1; // 5
char lastChar = greeting.charAt(lastIndex); // '!'
System.out.println("第一个字符: " + firstChar);
System.out.println("第三个字符: " + thirdChar);
System.out.println("最后一个字符: " + lastChar);

⚠️ 重要:StringIndexOutOfBoundsException

当你尝试访问一个不存在的下标时,程序会抛出 StringIndexOutOfBoundsException 异常,这通常发生在以下两种情况:

  1. 下标小于 0(负数)。
  2. 下标大于或等于字符串的长度(即 index >= length())。

示例(会引发异常)

String text = "Java";
// 错误示例1:下标为负数
try {
    char c = text.charAt(-1); // 抛出 StringIndexOutOfBoundsException
} catch (StringIndexOutOfBoundsException e) {
    System.out.println("捕获到异常: " + e.getMessage());
}
// 错误示例2:下标等于长度
try {
    char c = text.charAt(4); // "Java"的长度是4,最大有效下标是3,这里会抛出异常
} catch (StringIndexOutOfBoundsException e) {
    System.out.println("捕获到异常: " + e.getMessage());
}

最佳实践:在通过下标访问字符之前,最好先进行边界检查。

Java字符串下标从0开始吗?-图2
(图片来源网络,侵删)
String text = "Java";
int index = 4;
if (index >= 0 && index < text.length()) {
    char c = text.charAt(index);
    System.out.println("字符是: " + c);
} else {
    System.out.println("下标 " + index + " 超出范围!");
}

常见操作:遍历字符串

通过 charAt()for 循环,我们可以轻松地遍历字符串中的每一个字符。

使用 for 循环(传统方式)

String str = "遍历我";
for (int i = 0; i < str.length(); i++) {
    char ch = str.charAt(i);
    System.out.println("下标 " + i + " 处的字符是: " + ch);
}

使用增强型 for 循环(更简洁)

这种方式不需要手动管理下标,但如果你需要知道当前字符的下标,就需要借助额外的变量。

String str = "遍历我";
int index = 0;
for (char ch : str.toCharArray()) { // toCharArray() 将字符串转为字符数组
    System.out.println("下标 " + index + " 处的字符是: " + ch);
    index++;
}

字符串是不可变的

一个非常重要的概念是:Java 中的 String 对象是不可变的,这意味着一旦创建,它的内容就不能被改变。

charAt() 方法只是读取指定位置的字符,它不会修改字符串,你不能通过类似 str.charAt(0) = 'J' 这样的语法来修改字符,因为这种语法在 Java 中是不存在的。

Java字符串下标从0开始吗?-图3
(图片来源网络,侵删)

如果你想修改字符串,必须创建一个新的 String 对象。

// 错误的修改方式(Java 不允许)
// String str = "hello";
// str.charAt(0) = 'H'; // 编译错误!
// 正确的“修改”方式(创建新字符串)
String original = "hello";
String modified = "H" + original.substring(1); // "H" + "ello" -> "Hello"
System.out.println(original); // 输出 "hello" (原字符串未变)
System.out.println(modified); // 输出 "Hello" (这是一个新的字符串)

操作 方法 描述 示例
获取长度 length() 返回字符串中的字符数量。 int len = "abc".length(); // len = 3
获取字符 charAt(int index) 返回指定下标处的字符。下标从 0 开始 char c = "abc".charAt(1); // c = 'b'
检查下标 手动检查 避免因下标越界而引发异常。 if (index < str.length() && index >= 0)
遍历字符串 for 循环 + charAt() 按顺序访问每个字符。 for (int i=0; i<str.length(); i++) { ... }
核心特性 不可变性 String 对象创建后内容不能改变,charAt() 只读不写。 不能用 str.charAt(0) = 'x' 来修改。

理解字符串的下标是进行字符串处理(如查找、替换、解析等)的基础,请务必牢记索引从 0 开始注意边界检查这两个关键点。

分享:
扫描分享到社交APP
上一篇
下一篇