文档章节

JAVA的String类的trim陷阱

墙头草
 墙头草
发布于 2011/08/01 09:21
字数 276
阅读 279
收藏 2

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

public String trim() {
    int len = count;
    int st = 0;
    int off = offset;      /* avoid getfield opcode */Spring security防用户重复登录
    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之后就消失的原因了。

© 著作权归作者所有

墙头草
粉丝 16
博文 145
码字总数 117172
作品 0
卢湾
私信 提问
Android WebView相关属性

1、设置WebView为透明: [java] android:background="#00000000" android:cacheColorHint="#00000000" WebView.setBackgroundColor(0); 2、WebView 显示sd卡图片: [java] webView.loadDataW......

vane_
2012/07/26
1K
0
Arrays.asList陷阱

代码如下 public static void main(String[] args) { int[] data = {1,2,3,4,5}; List list = Arrays.asList(data); System.out.println("列表中的元素数量是:" + list.size()); } 注意这里......

肥猫钓鱼
2014/03/20
79
0
mybtis 等标签的作用

sql语句where条件中,需要一些安全判断,例如按性别检索,如果传入的参数是空的,此时查询出的结果很可能是空的,也许我们需要参数为空 时,是查出全部的信息。这是我们可以使用动态sql,增加...

北京_
2015/03/09
408
0
CommonLang3中的StringUtils最全解析

isEmpty 常用函数之一,判断字符串是否为""或者null isNotEmpty 最常用函数之一,跟上面方法相对 isAnyEmpty 任意一个参数为空的话,返回true,如果这些参数都不为空的话返回false。 在写一些...

丌官尚雄
02/21
27
0
简化你的 java 字符串操作:Guava 之 CharMatcher 用法简介

对字符串的处理应该是编程活动中最频繁的操作了,而原生的 JDK 以及 Java 本身的语法特性使得在 Java 中进行字符串操作是一件极其麻烦的事情,如果你熟悉 Shell/Awk/Sed/Perl/Python 等脚本语...

大数据之路
2013/11/24
8.8K
5

没有更多内容

加载失败,请刷新页面

加载更多

linux 磁盘不足异常

linux 报 No space left on device 异常 ,则是磁盘不足 ,导致异常 运行 df -h 命令查询磁盘使用率,如果有100%,则查找目录大日志文件删除 1.磁盘不足导致系统应用写入文件失败,如系统日志...

zaolonglei
28分钟前
3
0
即学即用的 30 段 Python 实用代码

☞ 分享:最全最新的Python学习大礼包 ☜ 点击查看 编译:Pita & AI开发者,作者:Fatos Morina Python是目前最流行的语言之一,它在数据科学、机器学习、web开发、脚本编写、自动化方面被许...

Object_Man
28分钟前
3
0
The server time zone value 'EDT' is unrecognized or represents more than one time zone.

2019-10-14 18:07:43.714 ERROR 74363 --- [Druid-ConnectionPool-Create-1855026648] com.alibaba.druid.pool.DruidDataSource : create connection SQLException, url: jdbc:mysql://10.30......

yizhichao
41分钟前
8
0
html加载顺序以及影响页面二次渲染额的因素

本文转载于:专业的前端网站➱html加载顺序以及影响页面二次渲染额的因素 浏览器请求发往服务器以后,返回HTML页面,页面内容开始渲染,具体的执行顺序为: 1. 浏览器开始载入html代码,发现<...

前端老手
44分钟前
9
0
BeginnersBook JSP、JSTL、Servlet 教程

来源:ApacheCN BeginnersBook 翻译项目 译者:飞龙 协议:CC BY-NC-SA 4.0 贡献指南 本项目需要校对,欢迎大家提交 Pull Request。 请您勇敢地去翻译和改进翻译。虽然我们追求卓越,但我们并...

ApacheCN_飞龙
56分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部