改bug过程中的新发现,重新认识String trim方法

原创 2016年06月01日 18:33:45

  今天遇到一个奇葩的问题,一个字符串包含了"\n"换行符,再执行trim()方法后,“\n”被去掉。

 于是研究了下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;
    }



从源码可以看出,是从字符数组的第一个位置开始往后查找,直到找到字符的asicii码大于‘ ’的索引,再从字符数组的最后一个位置开始往前查找,

直到找到字符的asicii码大于‘ ’的索引,最后通过substring方法截取2个索引之间的部分作为返回值,

        char s = '\n';
        int index = s;
        System.out.println(index);
        s = ' ';
        index = s;
        System.out.println(index);
通过以上代码,打印出‘\n’和' '的asicii码得到结果为10 32,‘\n’的asicii码为10,小于空字符' '的32,所以在截取字符串的时候,‘\n’不会被截取。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Swift trim space/new line(字符串过滤空格和换行符)

Swift字符串过滤空格和换行符,写法与原来的objective-c有点不同,因为Swift中的字符串的索引不是int类型,而是Index类型。/// UIView's useful extensio...

String的trim()方法无效的解决办法

后台返回的数据中,有空格,用trim()方法无效,后来发现,表面上看到的空格,unicode为12288,是全角空格,所以要先替换掉再trim(),str = str.replace((char) 1...

在JS原型prototype中编写提取整数和移除字符串首尾空白的trim方法

通过给Function.prototype增加方法 Function.prototype.method = function(name,func){ this.prototype[name] = ...

java中string.trim()函数的使用

trim():去掉字符串首尾的空格。   public static void main(String arg[]){ String a=" hello world "; St...
  • etjnety
  • etjnety
  • 2012年08月08日 11:23
  • 87427

java.lang.String中的trim()方法的详细说明

String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗?一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱。首先我直接反编译String类,...
  • muyu114
  • muyu114
  • 2010年07月14日 14:31
  • 69433

java.lang.String中的trim()方法的详细说明

String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗? 一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱。 首先我直接反编译Stri...

String.Trim()真相大揭秘

部门上次的CodeReview会议上,留下了一道作业题,也是本篇博文所要讲述的:String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗?很久很久以前,也就是前几个小时前,我一直...
  • vip__888
  • vip__888
  • 2010年01月13日 22:47
  • 15789

JDK源码之解读String最终类的trim()方法实现原理

JDK源码之解读String最终类的trim()方法实现原理 把目标字符串str转换成字节数组,从左到有循环该字节数组,若为空,则继续循环,否则,跳出循环。 从右到做循环该字节数组,若为空,则...

java 利用String.trim()函数实现右侧去除空格

trim函数有两点要特别注意,1、它可以去除字符串两端的空格,注意是两端!也就是“     ABCD    ”处理完就是“ABCD"了。2、它不仅仅是除去” “,还可以除去‘\t’,'\n'等字符,函...

利用jsonp实现http 的跨域访问

弄了半天终于弄明白了。  目前我实现的是html的客户端页面 http访问   python的服务端。 服务端:  (网上例子java servlet) 清单 7. 用 Java...
  • kevinew
  • kevinew
  • 2013年06月06日 14:17
  • 2087
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:改bug过程中的新发现,重新认识String trim方法
举报原因:
原因补充:

(最多只允许输入30个字)