.NET 2.0中的字符串比较

简介:

None.gif 平时编写代码的时候,字符串可能是大家接触得比较多的,所使用的字符串操作也应该得比较多的.在字符串比较方面,DOTNET2.0新增了一个枚举StringComparison:
None.gif
None.gif
None.gif
namespace  System
ExpandedBlockStart.gif
{
ExpandedSubBlockStart.gif      
public enum StringComparison {
InBlock.gif         CurrentCulture,
InBlock.gif         CurrentCultureIgnoreCase,
InBlock.gif         InvariantCulture,
InBlock.gif         InvariantCultureIgnoreCase,
InBlock.gif         Ordinal,
InBlock.gif         OrdinalIgnoreCase
ExpandedSubBlockEnd.gif         }

ExpandedBlockEnd.gif}

None.gif
None.gif可能大家平时在进行字符串比较的时候根本没有考虑那么多,
" = = " , " Eaqual() " 用得不亦乐乎,其实这里面的东西也挺多,性能,区域信息等dot.gif
None.gif
1 .首先是StringComparison.Ordinal        在进行调用String.Compare(string1,string2,StringComparison.Ordinal)的时候是进行非语言(non - linguistic)上的比较,API运行时将会对两个字符串进行byte级别的比较,因此这种比较是比较严格和准确的,并且在性能上也很好,一般通过StringComparison.Ordinal来进行比较比使用String.Compare(string1,string2)来比较要快10倍左右.(可以写一个简单的小程序验证,这个挺让我惊讶,因为平时使用String.Compare从来就没想过那么多).StringComparison.OrdinalIgnoreCase就是忽略大小写的比较,同样是byte级别的比较.性能稍弱于StringComparison.Ordinal.
None.gif
None.gif
2 .StringComparison.CurrentCulture        是在当前的区域信息下进行比较,这是String.Compare在没有指定StringComparison的时候默认的比较方式.例子如下:
None.gif
None.gif Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " en-US " );  // 当前的区域信息是美国
None.gif
             string  s1  =   " visualstudio " ;
None.gif            
string  s2  =   " windows " ;
None.gif            Console.WriteLine(String.Compare(s1, s2,StringComparison.CurrentCulture)); 
// 输出"-1"
None.gif

None.gif            Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " sv-SE " );  // 当前的区域信息是瑞典
None.gif
            Console.WriteLine(String.Compare(s1, s2,StringComparison.CurrentCulture));  // 输出"1"StringComarison.CurrentCultureIgnoreCase指在当前区域信息下忽略大小写的比较.
None.gif

None.gif
3 .StringComarison.InvariantCulture        使用StringComarison.InvariantCulture来进行字符串比较,在任何系统中(不同的culture)比较都将得到相同的结果,他是使用CultureInfo.InvariantCulture的静态成员CompareInfo来进行比较操作的.例子如下:
None.gif            Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " en-US " );  // 当前的区域信息是美国
None.gif
             string  s1  =   " visualstudio " ;
None.gif            
string  s2  =   " windows " ;
None.gif            Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture)); 
// 输出"-1"
None.gif

None.gif            Thread.CurrentThread.CurrentCulture 
=   new  CultureInfo( " sv-SE " );  // 当前的区域信息是瑞典
None.gif
            Console.WriteLine(String.Compare(s1, s2,StringComparison.InvariantCulture));  // 输出"-1"



本文转自高海东博客园博客,原文链接:http://www.cnblogs.com/ghd258/archive/2005/10/27/263011.html,如需转载请自行联系原作者
相关文章
|
算法 C#
一起谈.NET技术,总结字符串比较函数
  最近一段时间一直在重看CLR via C# , 这次把字符串比较的函数总结下。   1.Compare和CompareTo大PK   首先是我们最常用的String.Compare和CompareTo实例方法,先来看看这两个方法:   我们通过这个可以直观地看到,String的静态方法要比CompareTo多出好多的方法重载,其实这也是两者的最大区别,也就是说String.Compare有着更多的功能选项供我们控制。
904 0
一起谈.NET技术,.NET 中的正则表达式
前两天面试一个程序员,自己说工作中用到过正则表达式,也比较熟悉,问他要使用正则表达式需要引用那个命名空间,使用哪些类,居然吱吱唔唔答不上来,让他写一个验证电话号码的正则表达式也写不出来,实在是很奇怪这种程序员是怎么工作了两三年的。
742 0
|
存储
一起谈.NET技术,.NET 中的二进制浮点类型
  大多数人会对他们在.NET中的算术的"出错"首先感到惊讶。使用一些称为”浮点”算术来表示非整型数字不是.NET 相比其他大多数语言/平台特殊的地方。在.NET 内部是没问题的,但是你需要知道一些底层正在发生什么,否则你将会对一些结果感到惊讶。
1089 0
|
存储
.“.NET研究”NET 中的二进制浮点类型
  大多数人会对他们在.NET中的算术的"出错"首先感到惊讶。使用一些称为”浮点”算术来表示非整型数字不是.NET 相比其他大多数语言/平台特殊的地方。在.NET 内部是没问题的,但是你需要知道一些底层正在发生什么,否则你将会对一些结果感到惊讶。
791 0
|
JavaScript .NET 数据安全/隐私保护
|
SQL 安全 数据库连接