在.net 的framewrok框架中提供的排序方法中,如string.sort() 或ArrayList.Sort()方法。這兩個方法對字符串排序時,若是字符串中含有數字,則不會按數字大小排序。如:html
///<summary> ///主要用於文件名的比較。 ///</summary> public class FilesNameComparerClass : IComparer { // Calls CaseInsensitiveComparer.Compare with the parameters reversed. ///<summary> ///比較兩個字符串,若是含用數字,則數字按數字的大小來比較。 ///</summary> ///<param name="x"></param> ///<param name="y"></param> ///<returns></returns> int IComparer.Compare( Object x, Object y ) { if(x==null||y==null) throw new ArgumentException("Parameters can't be null"); string fileA = x as string; string fileB = y as string; char[] arr1 = fileA.ToCharArray(); char[] arr2 = fileB.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 ( int.Parse( s1 ) > int.Parse( s2) ) { return 1; } if ( int.Parse( s1 ) < int.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; } // return string.Compare( fileA, fileB ); // return( (new CaseInsensitiveComparer()).Compare( y, x ) ); } } 調用時的代碼以下: IComparer fileNameComparer = new FilesNameComparerClass(); List.Sort( fileNameComparer ); 這樣排序後的字符串就爲按字符串中的數值排序了,爲: aa1,aa2,aa10,aa100