当前位置: 代码迷 >> C# >> 字符串比较解决方法
  详细解决方案

字符串比较解决方法

热度:80   发布时间:2016-05-05 04:15:03.0
字符串比较
为什么s1="zhangsaN"<s2="zhanGsan"而s1="zhangsaP"<s2="zhanGsan“????
------解决思路----------------------
首先C#不能直接进行字符串比较
其次如果排序的话,你的两个字符串都是s2排在s1前面,因为G的ASCII码小于g的ASCII码
------解决思路----------------------
不管什么编码,前128位都是ASCII
------解决思路----------------------
"A"小于"a",因为ASCII码中A是65,a是97
------解决思路----------------------
static void OrderString()
        {
            var arr = new List<string>{ "zhangsaN", "zhanGsan", "zhangsaP", "zhanGsan", "A", "a" };
            arr.OrderBy(x => x).ToList().ForEach(x =>
            {
                Console.WriteLine(x);
            });
        }

奥特曼了,这东西还真是这样……
------解决思路----------------------
public enum StringComparison
    {
        // 摘要: 
        //     使用区域敏感排序规则和当前区域比较字符串。
        CurrentCulture = 0,
        //
        // 摘要: 
        //     使用区域敏感排序规则、当前区域来比较字符串,同时忽略被比较字符串的大小写。
        CurrentCultureIgnoreCase = 1,
        //
        // 摘要: 
        //     使用区域敏感排序规则和固定区域比较字符串。
        InvariantCulture = 2,
        //
        // 摘要: 
        //     使用区域敏感排序规则、固定区域来比较字符串,同时忽略被比较字符串的大小写。
        InvariantCultureIgnoreCase = 3,
        //
        // 摘要: 
        //     使用序号排序规则比较字符串。
        Ordinal = 4,
        //
        // 摘要: 
        //     使用序号排序规则并忽略被比较字符串的大小写,对字符串进行比较。
        OrdinalIgnoreCase = 5,
    }

序号排序规则才是按ASCII比较……默认是CurrentCulture 
------解决思路----------------------
https://msdn.microsoft.com/zh-cn/library/system.stringcomparison%28VS.80%29.aspx
碉堡的区域敏感排序规则
------解决思路----------------------
https://msdn.microsoft.com/zh-cn/library/system.globalization.cultureinfo%28v=vs.80%29.aspx
看完还是不知道为啥会这样……碉堡了
总不可能去研究RFC,ISO标准吧……
------解决思路----------------------
Console.WriteLine(string.Compare("zhangsaN", "zhanGsan", StringComparison.CurrentCulture));//-1
Console.WriteLine(string.Compare("zhangsaP", "zhanGsan", StringComparison.CurrentCulture));//1

------解决思路----------------------
确实是和语言设置相关的
看源代码就知道了
http://referencesource.microsoft.com/#mscorlib/system/globalization/compareinfo.cs,0cba7af692b66098
------解决思路----------------------
如何比较字符串
    // 查询数据库信息
        /// <returns>方法返回DataTable对象</returns>
        private DataTable GetStudent()
        {
            string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串
                @"server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd=");
            string P_Str_SqlStr = string.Format(//创建SQL查询字符串
                @"SELECT 学生姓名,CASE WHEN 所在学院 = '计算机学院'
 THEN '计算机学院学生' ELSE '否' END AS 是否为计算机学院学生 FROM tb_Student");
            SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器
                P_Str_SqlStr, P_Str_ConnectionStr);
            DataTable P_dt = new DataTable();//创建数据表
            P_SqlDataAdapter.Fill(P_dt);//填充数据表
            return P_dt;//返回数据表
        }//codego.net/1/4/139/

               // 查询数据库信息
        // <returns>方法返回DataTable对象</returns>
        private DataTable GetMessage()
        {
            string P_Str_ConnectionStr = string.Format(//创建数据库连接字符串
                @"server=WIN-GI7E47AND9R\LS;database=db_TomeTwo;uid=sa;pwd=");
            string P_Str_SqlStr = string.Format(//创建SQL查询字符串
                "SELECT 学生姓名,所在学院 FROM tb_Student");
            SqlDataAdapter P_SqlDataAdapter = new SqlDataAdapter(//创建数据适配器
                P_Str_SqlStr, P_Str_ConnectionStr);
            DataTable P_dt = new DataTable();//创建数据表
            P_SqlDataAdapter.Fill(P_dt);//填充数据表
            return P_dt;//返回数据表
        }
  相关解决方案