改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’不会被截取。

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

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

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

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

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

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

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

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

trim()  去掉字符串的头和尾。 eg: String a = "   Hi Java  ";         String b= "Hi Java";         Syste...
  • MyySophia
  • MyySophia
  • 2017年12月19日 15:48
  • 171

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

trim():去掉字符串首尾的空格。   [java] view plain copy public static void main(String ...
  • QPC908694753
  • QPC908694753
  • 2017年03月18日 13:39
  • 158

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

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

IE8下String的Trim()方法失效的解决方案

用jquery的trim()方法,$.trim(str)就可以了。
  • jcx5083761
  • jcx5083761
  • 2013年11月08日 10:25
  • 8754

String中的trim()方法

trim()方法是用来删除字符串两端的空白字符并返回,trim方法并不影响原来的字符串本身,它返回的是一个新的字符串。 string.trim(); 例如:var str="    hello  ...
  • xiayanyan131418
  • xiayanyan131418
  • 2016年01月05日 22:42
  • 414

std::string的trim()实现

网上找了下std::string的trim()实现,都不是很满意。自己写了一个,记录一下。 inline static wstring& left(wstring& str) { wstr...
  • super_admi
  • super_admi
  • 2013年07月24日 18:46
  • 5530

String.Trim()真相大揭秘

部门上次的CodeReview会议上,留下了一道作业题,也是本篇博文所要讲述的:String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗?很久很久以前,也就是前几个小时前,我一直...
  • vip__888
  • vip__888
  • 2010年01月13日 22:47
  • 16092
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:改bug过程中的新发现,重新认识String trim方法
举报原因:
原因补充:

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