切换语言为:繁体

详细解读 Java 字符串 String 工具类 trim 实现思路

  • 爱糖宝
  • 2024-06-18
  • 2065
  • 0
  • 0

Java 中去除 String 中的空白字符的工具方法是 trim() ,源码如下:

public String trim() {
    int len = value.length;
    int st = 0;
    char[] val = value;    /* avoid getfield opcode */

    while ((st < len) && (val[st] <= ' ')) {
        st++;
    }
    while ((st < len) && (val[len - 1] <= ' ')) {
        len--;
    }
    return ((st > 0) || (len < value.length)) ? substring(st, len) : this;
}

这段代码是Java中String类的trim()方法的实现,其作用是从字符串的两端移除空白字符,包括空格、制表符、换页符等。下面是逐行的详细解读:

public String trim() {

定义了一个公共方法trim(),返回值类型为String。此方法不接收任何参数。

int len = value.length;

声明并初始化一个整型变量len,其值为当前字符串的长度。value是String类的一个私有final字段,它存储字符串的字符数组。

int st = 0;

声明并初始化一个整型变量st(起始索引),初始值设为0。这个变量将用来记录字符串开始不为空白字符的位置。

char[] val = value;    /* avoid getfield opcode */

创建一个指向value的引用val。注释说明这样做是为了避免在循环体内直接访问value字段时产生额外的字段访问(getfield)操作码,从而略微提高运行效率。

接下来的两个while循环分别用于从字符串的开头和结尾移除空白字符。

while ((st < len) && (val[st] <= ' ')) {
    st++;
}

这个循环从字符串的起始位置开始遍历,只要当前索引st小于字符串长度len且当前位置的字符是一个空白字符(ASCII值小于或等于空格字符的ASCII值),就将st加1,直到遇到非空白字符或到达字符串末尾。

这里重点提醒:

  • <= ' ':这里的 ' ' 是一个空格字符的表示,其ASCII值为32。比较操作<= ' ' 用来检测当前检查的字符(即字符串末尾的那个字符)是否是一个空白字符,包括但不限于空格、制表符等。在ASCII码中,空格之后的字符(ASCII值大于32)被认为是非空白字符。因此,如果当前字符的ASCII值小于或等于32,这个条件就会成立,意味着字符是一个空白字符。

while ((st < len) && (val[len - 1] <= ' ')) {
    len--;
}

这个循环从字符串的末尾向前遍历,只要当前字符串的有效长度len大于起始索引st且末尾位置的字符是一个空白字符,就将len减1,直到遇到非空白字符或st等于len。

return ((st > 0) || (len < value.length)) ? substring(st, len) : this;

最后,根据st和len的值判断是否进行了修剪操作。如果st大于0,说明移除了前导空白;如果len小于原始长度,说明移除了尾随空白。任一条件满足,则使用substring(st, len)方法返回一个新的、两端无空白字符的字符串。如果两端都没有空白字符被移除(即st仍为0且len仍等于原长度),则直接返回当前对象(this),因为在这种情况下字符串不需要修改。

总结起来,trim()方法通过识别并移除字符串两端的空白字符,提供了字符串清理的功能,常用于文本处理前的预处理阶段。


0条评论

您的电子邮件等信息不会被公开,以下所有项均必填

OK! You can skip this field.