在.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