杰瑞科技汇

Java如何去掉字符串首字符?

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

Java如何去掉字符串首字符?-图1
(图片来源网络,侵删)

下面我将介绍几种最常用和推荐的方法,并附上代码示例和说明。

使用 substring() (最常用)

这是最直接、最常用的方法。substring() 方法可以从字符串中提取一个子字符串。

从索引 1 开始截取

字符串的索引从 0 开始,要去掉第一个字符,我们可以从索引 1 开始截取,直到字符串的末尾。

代码示例:

Java如何去掉字符串首字符?-图2
(图片来源网络,侵删)
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

说明:

Java如何去掉字符串首字符?-图3
(图片来源网络,侵删)
  • substring(int beginIndex, int endIndex): 返回一个从 beginIndex 开始,到 endIndex - 1 结束的子字符串。
  • str.length() 指定了结束索引,但由于不包含该索引,所以它会截取到最后一个字符。

使用 StringBufferStringBuilderdeleteCharAt()

如果你的字符串可能会被频繁修改,或者你已经在使用 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"
分享:
扫描分享到社交APP
上一篇
下一篇