有网友说正则快: http://topic.csdn.net/t/20040726/15/3211176.html
15 个解决方案
#1
正则吧~
#2
个人觉得是正则。
你测试几把就晓得了
你测试几把就晓得了
#4
上面的文章倒是不错~
#6
客客 在其53楼写道:
正则适用于带格式,并且不是很频繁的调用中,如果判断是否全是数字,那正则绝不是首选
正则适用于带格式,并且不是很频繁的调用中,如果判断是否全是数字,那正则绝不是首选
#7
自己写程序代码完美,那就用indexof快
否则正则快。
否则正则快。
#8
嗯,支持LZ使用IndexOf。
#9
感觉正则快吧?直觉没测试
#10
单一的indexof肯定要比正则快
但实际应用中并不是单一对比的
正则可以完成很复杂的数据匹配
如果10个indexof才能完成的功能1个正则就搞定,你还会选择用indexof吗
你能保证10个indexof的速度比一个正则的速度快吗
但实际应用中并不是单一对比的
正则可以完成很复杂的数据匹配
如果10个indexof才能完成的功能1个正则就搞定,你还会选择用indexof吗
你能保证10个indexof的速度比一个正则的速度快吗
#11
正则是最慢的
#12
正则使可以编译的,但是并不需要每次调用都编译一下
,而是在类初始化时候编译或者放一个静态表达式,静态初始化时候编译。
调用一次匹配的速度肯定赶不上indexOf,因为它需要编译一次,但是循环多次时间是差不多的,因为对于几秒几十秒而言编译一次时间可以忽略了。
#13
最好的就是自己写出来比对一下
#14
static void Main() {
string content = @"fpwuepqwurpqwu""13123183""fweifpwufpwoeufpqwupr""fweifwpouquefpoqf"""" ";
Regex ex = new Regex(@"""([^""]+)""", RegexOptions.Compiled);
List<string> lst = null;
int tick = 0;
lst = new List<string>(0x10000);
tick = Environment.TickCount;
for (int i = 0; i < 1000000; i++) {
int tagE = 0;
int p = 0;
while (p < content.Length) {
p = content.IndexOf('\"', p);
if (p == -1) break;
tagE = content.IndexOf('\"', p + 1);
if (tagE == -1) break;
lst.Add(content.Substring(p + 1, tagE - p - 1));
p = tagE + 1;
}
}
Debug.Print((Environment.TickCount - tick).ToString() + "," + lst.Count);
lst = new List<string>(0x10000);
tick = Environment.TickCount;
for (int i = 0; i < 1000000; i++) {
int tagE = 0;
int p = 0;
while (p < content.Length) {
p = content.IndexOf("\"", p);
if (p == -1) break;
tagE = content.IndexOf("\"", p + 1);
if (tagE == -1) break;
lst.Add(content.Substring(p + 1, tagE - p - 1));
p = tagE + 1;
}
}
Debug.Print((Environment.TickCount - tick).ToString() + "," + lst.Count);
lst = new List<string>(0x10000);
tick = Environment.TickCount;
for (int i = 0; i < 1000000; i++) {
foreach (Match m in ex.Matches(content)) {
lst.Add(m.Groups[1].Value);
}
}
Debug.Print((Environment.TickCount - tick).ToString() + "," + lst.Count);
}
测试结果:
735,2000000
6500,2000000
3328,2000000
因此,indexOf写得好,可以快于正则,否则正则更快。如果计算复杂,还是用正则比较好。
1和2代码一样,区别就是第一个IndexOf(char, startindex), 而第二个是string, startindex
#15
简单的匹配当然indexOf快过正则表达式,但正则表达式可作复杂条件的匹配,在这种情况下,一次正则匹配可能需要调用多次indexOf才能完成,indexOf在性能上就无优势可言,甚至可能还要慢些,而且还要增加编码的工作量。
#1
正则吧~
#2
个人觉得是正则。
你测试几把就晓得了
你测试几把就晓得了
#3
有人用java测试过,正则效率低:
http://blog.sina.com.cn/s/blog_49237ee3010008ig.html
#4
上面的文章倒是不错~
#5
#6
客客 在其53楼写道:
正则适用于带格式,并且不是很频繁的调用中,如果判断是否全是数字,那正则绝不是首选
正则适用于带格式,并且不是很频繁的调用中,如果判断是否全是数字,那正则绝不是首选
#7
自己写程序代码完美,那就用indexof快
否则正则快。
否则正则快。
#8
嗯,支持LZ使用IndexOf。
#9
感觉正则快吧?直觉没测试
#10
单一的indexof肯定要比正则快
但实际应用中并不是单一对比的
正则可以完成很复杂的数据匹配
如果10个indexof才能完成的功能1个正则就搞定,你还会选择用indexof吗
你能保证10个indexof的速度比一个正则的速度快吗
但实际应用中并不是单一对比的
正则可以完成很复杂的数据匹配
如果10个indexof才能完成的功能1个正则就搞定,你还会选择用indexof吗
你能保证10个indexof的速度比一个正则的速度快吗
#11
正则是最慢的
#12
正则使可以编译的,但是并不需要每次调用都编译一下
,而是在类初始化时候编译或者放一个静态表达式,静态初始化时候编译。
调用一次匹配的速度肯定赶不上indexOf,因为它需要编译一次,但是循环多次时间是差不多的,因为对于几秒几十秒而言编译一次时间可以忽略了。
#13
最好的就是自己写出来比对一下
#14
static void Main() {
string content = @"fpwuepqwurpqwu""13123183""fweifpwufpwoeufpqwupr""fweifwpouquefpoqf"""" ";
Regex ex = new Regex(@"""([^""]+)""", RegexOptions.Compiled);
List<string> lst = null;
int tick = 0;
lst = new List<string>(0x10000);
tick = Environment.TickCount;
for (int i = 0; i < 1000000; i++) {
int tagE = 0;
int p = 0;
while (p < content.Length) {
p = content.IndexOf('\"', p);
if (p == -1) break;
tagE = content.IndexOf('\"', p + 1);
if (tagE == -1) break;
lst.Add(content.Substring(p + 1, tagE - p - 1));
p = tagE + 1;
}
}
Debug.Print((Environment.TickCount - tick).ToString() + "," + lst.Count);
lst = new List<string>(0x10000);
tick = Environment.TickCount;
for (int i = 0; i < 1000000; i++) {
int tagE = 0;
int p = 0;
while (p < content.Length) {
p = content.IndexOf("\"", p);
if (p == -1) break;
tagE = content.IndexOf("\"", p + 1);
if (tagE == -1) break;
lst.Add(content.Substring(p + 1, tagE - p - 1));
p = tagE + 1;
}
}
Debug.Print((Environment.TickCount - tick).ToString() + "," + lst.Count);
lst = new List<string>(0x10000);
tick = Environment.TickCount;
for (int i = 0; i < 1000000; i++) {
foreach (Match m in ex.Matches(content)) {
lst.Add(m.Groups[1].Value);
}
}
Debug.Print((Environment.TickCount - tick).ToString() + "," + lst.Count);
}
测试结果:
735,2000000
6500,2000000
3328,2000000
因此,indexOf写得好,可以快于正则,否则正则更快。如果计算复杂,还是用正则比较好。
1和2代码一样,区别就是第一个IndexOf(char, startindex), 而第二个是string, startindex
#15
简单的匹配当然indexOf快过正则表达式,但正则表达式可作复杂条件的匹配,在这种情况下,一次正则匹配可能需要调用多次indexOf才能完成,indexOf在性能上就无优势可言,甚至可能还要慢些,而且还要增加编码的工作量。