两个字符串相比较,如何找出第一个不相同的部分? 找出两个字符串第一个不相同的部分例:str1: abc123aacc str2: abc4567aabb则结果:123 4567这个问题能用正则解决吗?请大哥帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用正则效率比较低,转换为byte,然后求“与”。 恐怕不能,你需要遍历。不可能都是这样“abc”开头的吧。 我主要是想根据文件名中的数字,自动从小到大排序:例如:a1.jpg、a2.jpg、---------a11.jpg,而不是a1.jpg、a11.jpg、a2.jpg..............同样的道理,如果两个文件名之间只有数值的差别,而且位置相同,则以数字的顺序排列 为什么不把文件名做下规定 例如:a001.jpg、a002.jpg、---------a011.jpg, 你可以用正则取出各个文件名中的数字啊.str1: abc123aacc str2: abc4567aabb 另外,如果数字后面的字母也不同你怎么办? 还是按照数字顺序排列,例如两个文件:aa12cc.jpg和aa3dd.jpg 则aa3dd.jpg排在第一 我要做的是一个类似于ftp资源管理器的东西,到底是什么文件名不是由我做主啊 有一种方法,把 a001.jpg 的点前边的a001的ascII加到一起。得到数据后排序。正则好慢。 如果你只是考虑数值的差别,可以先用“空格”把非数字型的其它字符替换掉,然后用trim去掉最前面的空格,接着以“空格”为分隔符Split出一个数组T(),比较数组中T(0)的值的大小,不就可以进行你要的排序了嘛。 如果有两个(或两个以上)的T(0)的值相同,就可以比较T(1)的值的大小,依次类推。 问到偶,那偶就重在参与private void button1_Click(object sender, EventArgs e){ string[] str = { "a1a.jpg", "a11a.jpg", "a12a.jpg", "a12b.jpg", "a7a.jpg" }; Array.Sort(str, delegate (string a, string b) { while (a != b) { string ta = Regex.Match(a, @"^[^\d]*").Value; string tb = Regex.Match(b, @"^[^\d]*").Value; if (ta != tb) return string.Compare(ta, tb); a = Regex.Replace(a, @"^[^\d]*", ""); b = Regex.Replace(b, @"^[^\d]*", ""); ta = Regex.Match(a, @"^\d*").Value; tb = Regex.Match(b, @"^\d*").Value; double fa; double fb; double.TryParse(ta, out fa); double.TryParse(tb, out fb); if (fa != fb) return Comparer<double>.Default.Compare(fa, fb); a = Regex.Replace(a, @"^\d*", ""); b = Regex.Replace(b, @"^\d*", ""); } return 0; } ); foreach (string s in str) Console.WriteLine(s);}---输出----a1a.jpga7a.jpga11a.jpga12a.jpga12b.jpg 关键是还是需要考虑非数值啊何况这个是要实现IComparer接口的,算法不能整得太复杂,文件一多速度就会很慢了 还有请教一下zswang 大哥,你说我这种情况用遍历字符的速度快还是你那个正则的方法速度快?正则我不怎么熟悉晚上结贴,先放一会~~~ treeview如何实现鼠标经过节点效果? 关于C# 附加SQL数据库的方法 怎么控制tabcontrol默认打开的选项卡 凑凑热闹,分享自己写的一个非常简单的代码 href后加变量怎么连接外网啊 VS2005中datagridview 问题 XmlNode.RemoveAll不能完全删除结点??? 当线程被阻塞时,线程进入什么状态? 有没有谁用过这样的类结构方面的工具 怎样判断一个dataset中的两张表的结构相同? **如何递归解析xml,深度可能是N级,节点要么是目录directory要么是文件File,如何递归遍历,并且修改File的属性值? 一个SQL server统计问题
而不是a1.jpg、a11.jpg、a2.jpg..............同样的道理,如果两个文件名之间只有数值的差别,而且位置相同,则以数字的顺序排列
str2: abc4567aabb 另外,如果数字后面的字母也不同你怎么办?
正则好慢。
如果你只是考虑数值的差别,可以先用“空格”把非数字型的其它字符替换掉,然后用trim去掉最前面的空格,接着以“空格”为分隔符Split出一个数组T(),比较数组中T(0)的值的大小,不就可以进行你要的排序了嘛。 如果有两个(或两个以上)的T(0)的值相同,就可以比较T(1)的值的大小,依次类推。
private void button1_Click(object sender, EventArgs e)
{
string[] str = { "a1a.jpg", "a11a.jpg", "a12a.jpg", "a12b.jpg", "a7a.jpg" }; Array.Sort(str, delegate (string a, string b)
{
while (a != b)
{
string ta = Regex.Match(a, @"^[^\d]*").Value;
string tb = Regex.Match(b, @"^[^\d]*").Value;
if (ta != tb) return string.Compare(ta, tb);
a = Regex.Replace(a, @"^[^\d]*", "");
b = Regex.Replace(b, @"^[^\d]*", "");
ta = Regex.Match(a, @"^\d*").Value;
tb = Regex.Match(b, @"^\d*").Value;
double fa;
double fb;
double.TryParse(ta, out fa);
double.TryParse(tb, out fb);
if (fa != fb)
return Comparer<double>.Default.Compare(fa, fb);
a = Regex.Replace(a, @"^\d*", "");
b = Regex.Replace(b, @"^\d*", "");
}
return 0;
}
);
foreach (string s in str)
Console.WriteLine(s);
}---输出----
a1a.jpg
a7a.jpg
a11a.jpg
a12a.jpg
a12b.jpg
关键是还是需要考虑非数值啊何况这个是要实现IComparer接口的,算法不能整得太复杂,文件一多速度就会很慢了