在 Java 中,有几种常见的方法可以去掉字符串的第一个字符,选择哪种方法取决于你的具体需求,比如字符串是否可能为空、性能要求等。

下面我将介绍几种最常用和推荐的方法,并附上代码示例和说明。
使用 substring() (最常用)
这是最直接、最常用的方法。substring() 方法可以从字符串中提取一个子字符串。
从索引 1 开始截取
字符串的索引从 0 开始,要去掉第一个字符,我们可以从索引 1 开始截取,直到字符串的末尾。
代码示例:

public class RemoveFirstChar {
public static void main(String[] args) {
String str1 = "HelloWorld";
String result1 = str1.substring(1); // 从索引1开始到末尾
System.out.println("原始字符串: " + str1);
System.out.println("去掉第一个字符后: " + result1); // 输出: elloWorld
String str2 = "Java";
String result2 = str2.substring(1);
System.out.println("原始字符串: " + str2);
System.out.println("去掉第一个字符后: " + result2); // 输出: ava
String str3 = "A";
String result3 = str3.substring(1);
System.out.println("原始字符串: " + str3);
System.out.println("去掉第一个字符后: " + result3); // 输出: "" (空字符串)
}
}
说明:
substring(int beginIndex): 返回一个从beginIndex开始到末尾的子字符串。- 优点: 简单、直观、性能好。
- 注意: 如果字符串长度为 1 或 0,此方法会返回一个空字符串 ,而不会抛出异常,这是非常安全的行为。
使用 substring(1, str.length())
这种方法显式地指定了结束索引(不包含该索引),其效果与方法一完全相同,但写法上更冗长一些。
代码示例:
String str = "Programming"; String result = str.substring(1, str.length()); System.out.println(result); // 输出: rogramming
说明:

substring(int beginIndex, int endIndex): 返回一个从beginIndex开始,到endIndex - 1结束的子字符串。str.length()指定了结束索引,但由于不包含该索引,所以它会截取到最后一个字符。
使用 StringBuffer 或 StringBuilder 的 deleteCharAt()
如果你的字符串可能会被频繁修改,或者你已经在使用 StringBuilder,那么使用它的 deleteCharAt() 方法会很方便。
代码示例:
public class RemoveFirstCharBuilder {
public static void main(String[] args) {
String str = "StringBuilder";
// 使用 StringBuilder
StringBuilder sb = new StringBuilder(str);
sb.deleteCharAt(0); // 删除索引为0的字符
String result1 = sb.toString();
System.out.println("使用 StringBuilder: " + result1); // 输出: tringBuilder
// 使用 StringBuffer (线程安全,但稍慢)
StringBuffer sbuf = new StringBuffer(str);
sbuf.deleteCharAt(0);
String result2 = sbuf.toString();
System.out.println("使用 StringBuffer: " + result2); // 输出: tringBuilder
}
}
说明:
deleteCharAt(int index): 删除指定索引处的字符。- 优点: 当你需要在循环中多次修改字符串时,
StringBuilder的性能远高于直接使用 拼接或substring。 - 缺点: 对于只去掉一个字符的简单操作,会比
substring稍微繁琐一些,因为它需要先创建一个StringBuilder对象。
使用 Apache Commons Lang 库 (第三方库)
如果你的项目已经使用了 Apache Commons Lang 库,它提供了一个非常简洁的工具方法。
你需要添加依赖 (Maven):
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12.0</version> <!-- 使用最新版本 -->
</dependency>
代码示例:
import org.apache.commons.lang3.StringUtils;
public class RemoveFirstCharCommons {
public static void main(String[] args) {
String str1 = "CommonsLang";
String result1 = StringUtils.substring(str1, 1);
System.out.println("原始字符串: " + str1);
System.out.println("去掉第一个字符后: " + result1); // 输出: ommonsLang
String str2 = "A";
String result2 = StringUtils.substring(str2, 1);
System.out.println("原始字符串: " + str2);
System.out.println("去掉第一个字符后: " + result2); // 输出: ""
}
}
说明:
StringUtils.substring(String str, int start)是String.substring()的一个封装,提供了额外的空值安全检查。- 优点: 代码可读性高,并且是经过充分测试的库方法。
- 缺点: 引入了外部依赖,对于如此简单的功能可能有些“杀鸡用牛刀”。
不推荐的方法(仅作了解)
使用 拼接
String str = "NotRecommended"; // 错误示范:这并不能去掉第一个字符 String wrongResult = str.substring(1) + str.substring(0, 1); // 输出: otRecommendedN
这种方法完全错误,它会将第一个字符拼到字符串末尾。
使用 remove() (常见误区)
很多初学者会尝试这样做:
// 错误示范:String没有remove()方法 String str = "ThisWillFail"; // str.remove(0); // 这行代码会编译错误!
java.lang.String 类是不可变的,并且没有 remove() 方法,这个方法存在于 StringBuilder 和其他可变序列中。
总结与最佳实践
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
substring(1) |
简单、高效、最常用 | 无 | 绝大多数情况下的首选。 |
StringBuilder.deleteCharAt() |
适合在循环中多次修改字符串 | 对于单次操作略显繁琐 | 当你已经在构建或修改一个字符串时。 |
StringUtils.substring() |
可读性好,有空值保护 | 引入外部依赖 | 项目已使用 Apache Commons Lang 库时。 |
拼接 / remove() |
- | 错误或低效 | 应避免使用。 |
对于在 Java 中去掉字符串的第一个字符,最推荐、最标准、最高效的方法是使用 substring(1)。
String original = "Hello"; String modified = original.substring(1); // modified 的值是 "ello"
