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