包含数字的字符串比较

     包含数字的字符串比较比正常的多了一个判断数字的大小,主要用于某些排序

   ///<summary>
        ///比较两个字符串,如果含用数字,则数字按数字的大小来比较。
        ///</summary>
        ///<param name="x"></param>
        ///<param name="y"></param>
        ///<returns></returns>
        public static int StringCompareByNum(string x, string y)
        {
            //约定有null时,判断都null空相等,不为空的大
            if (x == null || y == null)
            {
                if (x == null && y == null)
                {
                    return 0;
                }
                else if (x != null)
                {
                    return 1;
                }
                else
                {
                    return -1;
                }
            }
            string strA = Convert.ToString(x);
            string strB = Convert.ToString(y);
            char[] arr1 = strA.ToCharArray();
            char[] arr2 = strB.ToCharArray();
            int i = 0, j = 0;
            while (i < arr1.Length && j < arr2.Length)
            {
                if (char.IsDigit(arr1[i]) && char.IsDigit(arr2[j]))
                {
                    string s1 = "", s2 = "";
                    while (i < arr1.Length && char.IsDigit(arr1[i]))
                    {
                        s1 += arr1[i];
                        i++;
                    }
                    while (j < arr2.Length && char.IsDigit(arr2[j]))
                    {
                        s2 += arr2[j];
                        j++;
                    }
                    if (double.Parse(s1) > double.Parse(s2))
                    {
                        return 1;
                    }
                    if (double.Parse(s1) < double.Parse(s2))
                    {
                        return -1;
                    }
                }
                else
                {
                    if (arr1[i] > arr2[j])
                    {
                        return 1;
                    }
                    if (arr1[i] < arr2[j])
                    {
                        return -1;
                    }
                    i++;
                    j++;
                }
            }
            if (arr1.Length == arr2.Length)
            {
                return 0;
            }
            else
            {
                return arr1.Length > arr2.Length ? 1 : -1;
            }
        }

猜你喜欢

转载自www.cnblogs.com/singlelcx/p/11203524.html