手写实现java中的trim_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) 返回空字符串。

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值