.NET Framework字符串相關(guān)操作細(xì)節(jié)介紹
.NET Framework作為一個(gè)開發(fā)環(huán)境給編程人員帶來了非常大的好處。平時(shí)編寫代碼的時(shí)候,.NET Framework字符串可能是大家接觸得比較多的,所使用的字符串操作也應(yīng)該得比較多的.在字符串比較方面,DOTNET2.0新增了一個(gè)枚舉StringComparison:#t#
- namespace System
- {
- public enum StringComparison {
- CurrentCulture,
- CurrentCultureIgnoreCase,
- InvariantCulture,
- InvariantCultureIgnoreCase,
- Ordinal,
- OrdinalIgnoreCase
- }
- }
可能大家平時(shí)在進(jìn)行.NET Framework字符串比較的時(shí)候根本沒有考慮那么多,"= =","Eaqual()"用得不亦樂乎,其實(shí)這里面的東西也挺多,性能,區(qū)域信息等
1.首先是StringComparison.Ordinal 在進(jìn)行調(diào)用String.Compare(string1,string2,StringComparison.Ordinal)的時(shí)候是進(jìn)行非語言(non-linguistic)上的比較,API運(yùn)行時(shí)將會對兩個(gè)字符串進(jìn)行byte級別的比較,因此這種比較是比較嚴(yán)格和準(zhǔn)確的,并且在性能上也很好,一般通過StringComparison.Ordinal來進(jìn)行比較比使用String.Compare(string1,string2)來比較要快10倍左右.(可以寫一個(gè)簡單的小程序驗(yàn)證,這個(gè)挺讓我驚訝,因?yàn)槠綍r(shí)使用String.Compare從來就沒想過那么多).StringComparison.OrdinalIgnoreCase就是忽略大小寫的比較,同樣是byte級別的比較.性能稍弱于StringComparison.Ordinal.
2.StringComparison.CurrentCulture 是在當(dāng)前的區(qū)域信息下進(jìn)行比較,這是String.Compare在沒有指定StringComparison的時(shí)候默認(rèn)的比較方式.例子如下:
- Thread.CurrentThread.CurrentCulture =
new CultureInfo("en-US");- //當(dāng)前的區(qū)域信息是美國
- string s1 = "visualstudio";
- string s2 = "windows";
- Console.WriteLine(String.Compare(s1,
s2,StringComparison.CurrentCulture));- //輸出"-1"
- Thread.CurrentThread.CurrentCulture =
new CultureInfo("sv-SE");- //當(dāng)前的區(qū)域信息是瑞典
- Console.WriteLine(String.Compare(s1,
s2,StringComparison.CurrentCulture));- //輸出"1"StringComarison.Current
CultureIgnoreCase指在當(dāng)前區(qū)域信息下
忽略大小寫的比較.
3.StringComarison.InvariantCulture 使用StringComarison.InvariantCulture來進(jìn)行.NET Framework字符串比較,在任何系統(tǒng)中(不同的culture)比較都將得到相同的結(jié)果,他是使用CultureInfo.InvariantCulture的靜態(tài)成員CompareInfo來進(jìn)行比較操作的.例子如下:
- Thread.CurrentThread.CurrentCulture =
new CultureInfo("en-US");- //當(dāng)前的區(qū)域信息是美國
- string s1 = "visualstudio";
- string s2 = "windows";
- Console.WriteLine(String.Compare(s1,
s2,StringComparison.InvariantCulture));- //輸出"-1"
- Thread.CurrentThread.CurrentCulture =
new CultureInfo("sv-SE");- //當(dāng)前的區(qū)域信息是瑞典
- Console.WriteLine(String.Compare(s1,
s2,StringComparison.InvariantCulture));- //輸出"-1"
.NET Framework字符串的比較相關(guān)操作方法就為大家介紹到這里。