c#按字符串中的数字排序问题
在.net 的framewrok框架中提供的排序方法中,如string.sort() 或ArrayList.Sort()方法。这两个方法对字符串排序时,如果字符串中含有数字,则不会按数字大小排序。如:
///<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 = , j =;
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 ;
}
if ( int.Parse( s1 ) < int.Parse( s2) )
{
return -;
}
}
else
{
if ( arr1[i] > arr2[j] )
{
return ;
}
if ( arr1[i] < arr2[j] )
{
return -;
}
i++;
j++;
}
}
if ( arr1.Length == arr2.Length )
{
return ;
}
else
{
return arr1.Length > arr2.Length? : -;
}
// return string.Compare( fileA, fileB );
// return( (new CaseInsensitiveComparer()).Compare( y, x ) );
}
}
调用时的代码如下:
IComparer fileNameComparer = new FilesNameComparerClass();
List.Sort( fileNameComparer );
这样排序后的字符串就为按字符串中的数值排序了,为:
aa1,aa2,aa10,aa100
c#按字符串中的数字排序问题的更多相关文章
- 写出将字符串中的数字转换为整型的方法,如:“as31d2v”->312,并写出相应的单元测试,正则去掉非数值、小数点及正负号外的字符串
写出将字符串中的数字转换为整型的方法,如:"as31d2v"->312,并写出相应的单元测试,输入超过int范围时提示不合法输入. public struct Convert ...
- SQL Server 2008 R2——创建函数 筛选出字符串中的数字 筛选出字符串中的非数字
=================================版权声明================================= 版权声明:本文为博主原创文章 未经许可不得转载 请通过右 ...
- Excel中如何提取字符串中的数字
取字符串中的数字,假如数据在A列,提取公式为 =LOOKUP(9^9,--MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&5^19)),ROW($1:$99) ...
- C# 使用正则表达式去掉字符串中的数字,或者去掉字符串中的非数字
/// 去掉字符串中的数字 public static string RemoveNumber(string key) { ...
- C++ 提取字符串中的数字
C++ 提取字符串中的数字 #include <iostream> using namespace std; int main() { ] = "1ab2cd3ef45g&quo ...
- java截取字符串中的数字
java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...
- python(15)提取字符串中的数字
python 提取一段字符串中去数字 ss = “123ab45” 方法一:filter filter(str.isdigit, ss) 别处copy的filter的用法: # one>> ...
- 用sql获取某字符串中的数字部分的语句
create function dbo.F_Get_No ( @No varchar(100) ) RETURNS bigint AS BEGIN WHILE PATINDEX('%[^0-9]%', ...
- C# 获取字符串中的数字
/// <summary> /// 获取字符串中的数字(不包含小数点) /// </summary> /// <param name="str"> ...
随机推荐
- OpenFlow PacketOut消息机制
OpenFlow PacketOut消息机制 前言 由于最近实验的进行,遇到一个比较棘手的问题,就是利用控制器主动发送packet消息的问题,期间遇到一些问题,后来在RYU群中得到群友左木的帮助成功解 ...
- VS2013安装及测试
一.Visual Studio的安装 首先是Visual Studio英文版的安装,安装完成后,为了用的时候方便,我从官网下载Visual Studio 2013的语言包并安装. 二.进行单元测试. ...
- SQLServer2008只能编辑前面200行数据
设置编辑所有行:操作步骤:打开数据库-〉工具-〉选项-〉sqlserver对象资源管理器-〉命令 把200改为0,即可编辑所有行了
- 【转】Mysql事务,并发问题,锁机制
转自:http://www.cnblogs.com/fidelQuan/p/4549068.html 1.什么是事务 事务是一条或多条数据库操作语句的组合,具备ACID,4个特点. 原子性:要不全部成 ...
- python自动化之爬虫模拟登录
http://selenium-python.readthedocs.io/locating-elements.html ####################################### ...
- angular学习总结
因为学习需要,要配置一系列环境,中间又出了很多各种各样的花式错误,因此当做个人总结记录一下.一.vs1. 完全卸载VS2013找到vs2013的安装包,如图 打开cmd命令行窗口,cd到安装包下的vs ...
- Integration Guide
This document, along with the samples and Javadoc™ in the IBM Sametime Software Development Kit (SDK ...
- JDK8新特性,给接口添加一个默认实现
在JDK8中,允许给接口本身添加一个默认的实现.用“default”进行修饰.如下实例 package interfacetest; public interface TestInterface { ...
- MT【193】三面角的正余弦定理
(原题为浙江名校新高考研究联盟2018届第三次联考选择压轴题) 在平面$\alpha$内,已知$AB\perp BC$,过直线$AB,BC$分别作平面$\beta,\gamma$,使得锐二面角$\al ...
- 洛谷P3348 [ZJOI2016]大森林(LCT,虚点,树上差分)
洛谷题目传送门 思路分析 最简单粗暴的想法,肯定是大力LCT,每个树都来一遍link之类的操作啦(T飞就不说了) 考虑如何优化算法.如果没有1操作,肯定每个树都长一样.有了1操作,就来仔细分析一下对不 ...