日期:2014-05-20  浏览次数:20659 次

String.trim的方法是个大BUG???

对于这种类型,他都会当成空格trim掉????

查看源包里的定义:

他是把ASCII码里所有unicode值小于空格的全当成空格了???


但这个字符怎么过滤掉??
按他定义:
  String   trim()  
                    Returns   a   copy   of   the   string,   with   leading   and   trailing   whitespace   omitted.  

他是开头和结尾的空格,空格的定义应该不是这样子的吧


  public   static   void   main(String   args[])   {
        String   a=   "1111111 ";
        System.out.println( "aaaa ");
        System.out.println( "trim前: "+a);
        System.out.println( "trim后 "+a.trim());
}

你会发现结果全是11111


------解决方案--------------------
搞不明白LZ说社么 我跑了下 没问题
------解决方案--------------------
public String trim()返回字符串的副本,忽略前导空白和尾部空白。
如果此 String 对象表示一个空字符序列,或者此 String 对象表示的字符序列的第一个和最后一个字符的代码都大于 '\u0020 '(空格字符),则返回对此 String 对象的引用。

否则,若字符串中没有代码大于 '\u0020 ' 的字符,则创建并返回一个表示空字符串的新的 String 对象。

否则,假定 k 为代码大于 '\u0020 ' 的第一个字符的索引,m 为代码大于 '\u0020 ' 的最后一个字符的索引。创建一个新的 String 对象,它表示此字符串中从索引 k 处的字符开始,到索引 m 处的字符结束的子字符串,也就是 this.substring(k, m+1) 的结果。

此方法用于截去字符串从头到尾的空白(如上面所定义)。


返回:
此字符串移除了前导和尾部空白的副本,如果没有前导和尾部空白,则返回此字符串

///////////////////////////////////////
这是他的定义,你可能理解的不对,它不是去掉了空格,而是返回了一个新的string对象,或原String对象的引用。
------解决方案--------------------
那是你不看文档造成的,

API中已经明确的说明了小于20的字符都认为是空白的:
If this String object represents an empty character sequence, or the first and last characters of character sequence represented by this String object both have codes greater than '\u0020 ' (the space character), then a reference to this String object is returned.


如果你只想去除空格,自己写一个呗
------解决方案--------------------
楼主把“空白字符”和“空格”混淆了。
------解决方案--------------------
如果你只想去除空格,自己写一个呗