若在C#中想比较两个字符串,但是两个字符串中又夹杂着许多的符号,如果单纯的想比较字母或数字,则不能使用最简单的Compare来比较他们。一般的常规方法是比较不出的。只能使用CultureInfo中的CompareInfo来比较。然后有一个CompareOptions.IgnoreSymbols选项可以供选择。同时在引用中也要加入System.Globalization才能使用这个比较。若为0则表示相等。
View Code
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Globalization; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { string a="dfdsa+-38':c"; string b="df(d&s*a3<8c"; //正常比较 Console.WriteLine("Compare a and b:{0}",string.Compare(a,b)); //使用CultureInfo中的CompareInfo来比较 Console.WriteLine("(CurrentCulture) Compare a and b:{0}",CultureInfo.CurrentCulture.CompareInfo.Compare(a,b,CompareOptions.IgnoreSymbols)); Console.WriteLine("(InvariantCulture) Compare a and b:{0}", CultureInfo.InvariantCulture.CompareInfo.Compare(a, b, CompareOptions.IgnoreSymbols)); } } }
上面的输出为第一个为1,第二第三个为0。
但是CultureInfo.CurrentCulture和CultureInfo.InvariantCulture我没有搞清楚。
网上一般说CurrentCulture在当前区域信息下进行比较可以给出一样的结果;InvariantCulture在不同区域信息下比较结果都一样;但是这个区域是哪里我不懂= =求高人指教~