如何给形如"1月-2月","11月-12月"的字符串比较大小? 在逻辑上后者肯定应该排在后面,但是如果使用CompareTo(),因为第二个字符'月'比‘1’大,所以前者反而排在了后面。请问有没有什么比较简单的方法来解决这样的问题?我目前能想到的就是单独写一个方法MyCompare(string a, string b)来比较,但是这样感觉不够简练。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 没太懂你的意思,不知道是不是比较 "1月-2月","11月-12月"这类似的字符串代表的月份谁大 ??如果是的话 说个不太好的方法 用Replace可以替换“月”为“-” 再用 split("---")分割字符串,之后就可以比较了 哦 看错了 可以替换“月”为“” 再 分割 split("-") 如果说字符串之间比较的逻辑是自己定义的话,那么除了自己写方法之外,还能怎么办呢?。。.NET类库很强大也不可能强大到为每个人量身定做呀。。就这个问题的话,可以先过滤中文,然后获取其他有用信息,再一一比较。。先考虑能不能实现,实现之后再考虑简不简练。。 LZ 是指月份大 ? 还是什么啊 ~我不明白LZ的意思或者是"1月2日","11月12日" ???????? 如果LZ是想比较字符串大小的话你应该说明是比较字符串长度大小,还是比较ASCII码值,比较字符串长度用length方法就行,如果比较字符串的大小,则比较的是字符的ASCII编码的大小.你搜索一下ASCII码表就可以得知每一个ASCII字符的大小.在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较,如果比较时间的大小的话我想因该有个年份吧,把它Convert成一个datatime类型的,然后去比较,这样就行了 public class SortModel { public string No { get; set; } public string Date { get; set; } public string Others { get; set; } public SortModel(string no, string date, string others) { this.No = no; this.Date = date; this.Others = others; } }public class SortByNoDate:IComparer<SortModel> { public int Compare(SortModel x, SortModel y) { if (x.No == y.No) { return ComparePlus(x.Date,y.Date); } else { return x.No.CompareTo(y.No); } } private int ComparePlus(string x, string y) { int tempX; int tempY; if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 2), out tempY)) { return x.CompareTo(y); } else if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 1), out tempY)) { return 1; } else if (int.TryParse(x.Substring(0, 1), out tempX) && int.TryParse(y.Substring(0, 2), out tempY)) { return -1; } else { return x.CompareTo(y); } } }static void Main(string[] args) { List<SortModel> modelList = new List<SortModel>(); modelList.Add(new SortModel("200", "3月-4月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("100", "5月-6月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("200", "11月-12月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("300", "5月-6月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("200", "1月-2月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("100", "9月-10月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("300", "1月-2月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("300", "11月-12月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("100", "1月-2月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("200", "5月-6月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("100", "3月-4月", Guid.NewGuid().ToString())); modelList.Add(new SortModel("300", "3月-4月", Guid.NewGuid().ToString())); modelList.Sort(new SortByNoDate()); WriteOut(modelList); //Console.WriteLine("1月-2月".Substring(0,2)); Console.ReadKey(); } private static void WriteOut(List<SortModel> list) { foreach (SortModel model in list) { Console.WriteLine("OUT__________" + model.No + "," + model.Date + "," + model.Others); } } 如21楼所说,把比较类改成这样,好多了public class SortByNoDate:IComparer<SortModel> { public int Compare(SortModel x, SortModel y) { if (x.No == y.No) { //return ComparePlus(x.Date,y.Date); return int.Parse(x.Date.Split('月')[0]) - int.Parse(y.Date.Split('月')[0]); } else { return x.No.CompareTo(y.No); } } //private int ComparePlus(string x, string y) //{ // int tempX; // int tempY; // if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 2), out tempY)) // { // return x.CompareTo(y); // } // else if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 1), out tempY)) // { // return 1; // } // else if (int.TryParse(x.Substring(0, 1), out tempX) && int.TryParse(y.Substring(0, 2), out tempY)) // { // return -1; // } // else // { // return x.CompareTo(y); // } //} } 我最想问的是能不能override某个.NET类库提供的方法,比如compareTo之类的,而非自定义一个方法。 求助.NET的音频播放引擎 如何只把字符串“ab\rABC\rMNBL\r”中的最后一个“\r”替换成“ \r” 谁能帮我把这小段VB代码翻译成C#?谢谢了 请教高手.关于form中 combobox 的Items 属于的问题 求救 js 付值的问题(.net 3.5) ajax求援 如何定期删除文件? 请大家帮忙分析一下,强类型的DataSet在进行Merge时抛出NullException错误,是怎么产生的?如何解决? 关于.net TextBox继承问题 winfrom 中让用户自由移动控件 VS打包安装
.NET类库很强大也不可能强大到为每个人量身定做呀。。
就这个问题的话,可以先过滤中文,然后获取其他有用信息,再一一比较。。
先考虑能不能实现,实现之后再考虑简不简练。。
比较字符串长度用length方法就行,如果比较字符串的大小,则比较的是字符的ASCII编码的大小.你搜索一下ASCII码表就可以得知每一个ASCII字符的大小.在比较时,设置一个计数器,从零开始,一直循环到最短的那个字符结束,一位一位进行比较,
如果比较时间的大小的话我想因该有个年份吧,把它Convert成一个datatime类型的,然后去比较,这样就行了
public class SortModel
{
public string No
{
get;
set;
} public string Date
{
get;
set;
} public string Others
{
get;
set;
} public SortModel(string no, string date, string others)
{
this.No = no;
this.Date = date;
this.Others = others;
}
}public class SortByNoDate:IComparer<SortModel>
{
public int Compare(SortModel x, SortModel y)
{
if (x.No == y.No)
{
return ComparePlus(x.Date,y.Date);
}
else
{
return x.No.CompareTo(y.No);
}
} private int ComparePlus(string x, string y)
{
int tempX;
int tempY;
if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
{
return x.CompareTo(y);
}
else if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 1), out tempY))
{
return 1;
}
else if (int.TryParse(x.Substring(0, 1), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
{
return -1;
}
else
{
return x.CompareTo(y);
}
}
}
static void Main(string[] args)
{
List<SortModel> modelList = new List<SortModel>();
modelList.Add(new SortModel("200", "3月-4月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("100", "5月-6月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("200", "11月-12月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("300", "5月-6月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("200", "1月-2月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("100", "9月-10月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("300", "1月-2月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("300", "11月-12月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("100", "1月-2月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("200", "5月-6月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("100", "3月-4月", Guid.NewGuid().ToString()));
modelList.Add(new SortModel("300", "3月-4月", Guid.NewGuid().ToString())); modelList.Sort(new SortByNoDate()); WriteOut(modelList);
//Console.WriteLine("1月-2月".Substring(0,2)); Console.ReadKey();
} private static void WriteOut(List<SortModel> list)
{
foreach (SortModel model in list)
{
Console.WriteLine("OUT__________" + model.No + "," + model.Date + "," + model.Others);
}
}
{
public int Compare(SortModel x, SortModel y)
{
if (x.No == y.No)
{
//return ComparePlus(x.Date,y.Date);
return int.Parse(x.Date.Split('月')[0]) - int.Parse(y.Date.Split('月')[0]);
}
else
{
return x.No.CompareTo(y.No);
}
} //private int ComparePlus(string x, string y)
//{
// int tempX;
// int tempY;
// if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
// {
// return x.CompareTo(y);
// }
// else if (int.TryParse(x.Substring(0, 2), out tempX) && int.TryParse(y.Substring(0, 1), out tempY))
// {
// return 1;
// }
// else if (int.TryParse(x.Substring(0, 1), out tempX) && int.TryParse(y.Substring(0, 2), out tempY))
// {
// return -1;
// }
// else
// {
// return x.CompareTo(y);
// }
//}
}