新闻中心

当前位置 > 新闻中心> 电脑办公 > CPU

红色娘子军_trim() 的秘密

trim() 是一个常见的字符串操作方法,用于去除字符串前后的空白符,比如 " xyz ".trim() 返回 "xyz"

Java 中的实现

实现思路很简单,从头部遍历,比较字符,记录第一个非空白字符的位置;再从尾部遍历,比较字符,记录最后一个非空白字符的位置。最后用记录的起止位置从原字符串截取。

@NotNull public String trim() {
    int len = value.length;  // ①
    int st = 0;
    char[] val = value;

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

① 这里变量 len 的名字可能具有迷惑性,它并没有长度的意思,它其实是表示字符串最后一个非空白字符的索引+1

② 这里有两个判断条件,第一个条件是判断 st < len,可以去除[原字符串是空字符串的情况],如果原字符串已经是空字符串,那么两次遍历都不会进行,最后结果返回原字符串;如果原字符串不是空字符串,那么可以进行从头部开始的遍历。第二个条件是字符比较,比较当前字符的 ASCII 码值是否小于等于 " ",也就是说 Java 中的 trim() 实际上是把字符串前后小于等于 " " 的字符都去除掉了。小于 " " 的字符都是不可见字符,包括换行符和制表符。所以如果字符串前后有换行符或者制表符,trim() 也会一并去掉,符合去掉空白符的定义。

③ 这里仍然有两个判断条件,第一个条件还是判断 st < len,这次可以去除[原字符串全部由空白符组成的情况],如果原字符串全部由空白符组成,那么从尾部开始的遍历就不用进行,结果从 substring(len, len) 返回空字符串。

③ zhe li reng ran you liang ge pan duan tiao jian, di yi ge tiao jian hai shi pan duan st lt len, zhe ci ke yi qu chu yuan zi fu chuan quan bu you kong bai fu zu cheng de qing kuang, ru guo yuan zi fu chuan quan bu you kong bai fu zu cheng, na me cong wei bu kai shi de bian li jiu bu yong jin xing, jie guo cong substring len, len fan hui kong zi fu chuan.

trim(String s, char ch) 去除字符串前后特定字符

对上述代码稍加改动就可以实现去除字符串前后特定字符版本的 trim()

public String trim(@NotNull String s, char ch) {
    char[] chars = s.toCharArray();
    int start = 0;
    int stop = chars.length;

    while ((start < stop) && (chars[start] == ch)) {  // ①
        start++;
    }
    while ((start < stop) && (chars[stop - 1] == ch)) {  // ①
        stop--;
    }
    return ((start > 0) || (stop < chars.length)) ? s.substring(start, stop) : s;
}

① 字符比较的时候改成,是否等于特定字符。

trim() 实现的其他应用

trim() 的实现结构很适合那些需要对列表的前后部分做处理的情况,只需要修改两次遍历中的第二个判断条件即可。

当前文章:http://www.gfhrs.com/w9lh/149299-862578-94367.html

发布时间:14:06:04

六彩网免费资料大全??香港历史开奖记录??任九开奖结果19038??香港马会救世一码中特??www.51212.com??济公心水论坛王中王网??本港台现场报码665566??天马高手论坛??6合彩铁算盘心水论坛??香港马会开奖结果??

文章观点支持

文章价值打分
当前文章打分0 分,共有0人打分
热门评论
热门文章