包含数字的字符串比较
包含数字的字符串比较比正常的多了一个判断数字的大小,主要用于某些排序
///<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; } }