小心String类的trim陷阱

最近在调试一段Java代码的时候,发生个奇怪的现象,在一个字符串的后面跟了一个不可见字符(acsii编码为0x13),对该字符串进行trim操作之后,发现该不可见字符消失了,在调试的过程中,没有认为会是因为trim造成的,但是在阅读了java的String类代码之后,才终于明白trim方法到底是怎么回事了。

 

 

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

	while ((st < len) && (val[off + st] <= ' ')) {
	    st++;
	}
	while ((st < len) && (val[off + len - 1] <= ' ')) {
	    len--;
	}
	return ((st > 0) || (len < count)) ? substring(st, len) : this;
}
 注意其中的while判断部分,自己原来一直以为trim只是比较字符是否等于空格,但实际上trim函数会把所有包含空格在内的以及空格之前的所有不可见字符全部滤掉,因为空格的ascii码是0x20,这也就是为什么0x13字符经过trim之后就消失的原因了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值