[转载]java.lang.String中的…
来源:互联网 发布:棋牌游戏源码出售 编辑:程序博客网 时间:2024/06/10 09:36
String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗?
一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱。
首先我直接反编译String类,找到Trim()方法:
publicstring Trim() { return this.TrimHelper(WhitespaceChars, 2); }
TrimHelper方法有两个参数,第一个参数名WhitespaceChars,首字母尽然是大写的,肯定有文章,真不出我所料:
internalstatic readonly char[] WhitespaceChars;
static String()
{ Empty = " 继续我们的探索,直接反编译TrimHelper,哇,也许这个才是我想要的,私有的TrimHelper方法:
private string TrimHelper(char[] trimChars, int trimType) { int num = this.Length - 1; intstartIndex = 0; if (trimType != 1) { startIndex = 0; while (startIndex < this.Length) { int index = 0; char ch = this[startIndex]; index = 0; while (index < trimChars.Length) { if (trimChars[index] == ch) { break; } index++; } if (index == trimChars.Length) { break; } startIndex++; } } if(trimType != 0) { num = this.Length - 1; while (num >= startIndex) { int num4 = 0; char ch2 =this[num]; num4 = 0; while (num4 < trimChars.Length) { if (trimChars[num4] == ch2) { break; } num4++; } if (num4 == trimChars.Length) { break; } num--; } } int length = (num - startIndex) + 1;if (length == this.Length) { return this; } if (length == 0) { return Empty; } returnthis.InternalSubString(startIndex, length, false); }
TrimHelper方法有两个参数:
第一个参数trimChars,是要从字符串两端删除掉的字符的数组;
第二个参数trimType,是标识Trim的类型。就目前发现,trimType的取值有3个。当传入0时,去除字符串头部的空白字符,传入1时去除字符串尾部的空白字符,传入其他数值(比如2)去除字符串两端的空白字符。
最后再看看真正执行字符串截取的方法:
private unsafe string InternalSubString(int startIndex, int length, bool fAlwaysCopy) { if(((startIndex == 0) && (length == this.Length)) && !fAlwaysCopy) { return this; } string str = FastAllocateString(length); fixed (char* chRef = &str.m_firstChar) { fixed (char* chRef2 = &this.m_firstChar) { wstrcpy(chRef, chRef2 + startIndex, length); } } return str; }
最后总结一下:
String.Trim()方法会去除字符串两端,不仅仅是空格字符,它总共能去除25种字符:
('/t', '/n', '/v', '/f', '/r', ' ', '/x0085', '/x00a0', ' ', ' ', '', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '?', '/u2028','/u2029', ' ', '?')
如果你想保留其中的一个或多个(例如/t制表符,/n换行符,/r回车符等),请慎用Trim方法。
请注意,Trim删除的过程为从外到内,直到碰到一个非空白的字符为止,所以不管前后有多少个连续的空白字符都会被删除掉。
TrimStart和TrimEnd方法
如果想去除字符串两端其他任意字符,可以考虑Trim他的重载兄弟:String.Trim(Char[]),传入你想要去除的哪些字符的数组。
源码奉上:
publicstring Trim(params char[] trimChars) { if ((trimChars == null) || (trimChars.Length == 0)) { trimChars = WhitespaceChars; } return this.TrimHelper(trimChars, 2); }
空格 != 空白字符,删除空格请使用: Trim(‘ ‘);
- [转载]java.lang.String中的…
- [转载]java.lang.String中的…
- java.lang.String中的trim()…
- java.lang.String中的trim()…
- java.lang.String.split()中的|
- 转载 java.lang.String 类的所有方法
- 关于java.lang.String中的public int lastIndexOf(String,int)
- Java.lang.String & [Ljava.lang.String
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- webelement中的方法getText()和getAttribute(java.lang.String name)
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- java.lang.String中的trim()方法的详细说明
- 关系是泥饭碗,是会碎的;文…
- 职来职往潘婷婷获得全部18盏…
- 红楼梦诗词
- 职来职往潘婷婷获得全部18盏…
- 361度公司员工大罢导制5.31…
- [转载]java.lang.String中的…
- C++中自增(减)前缀式和后缀式区别
- JAVA连接sybase数据库程序代码
- 中国古代绝密霸王术
- 一段代码慢慢了解shell
- 转载:“亚洲八大讲师”出炉经…
- 【转】 软件开发人员的作战手册 - …
- 探访拿破仑葬身地:圣赫勒拿…
- 只有死亡和税收是不可避免的…