日期:2014-05-17  浏览次数:20804 次

求一个高效率的字符串处理代码
031007FFFF0C10  031007FFFF0F11 031007FF030C10031007FFFF0C10    03  1007 FF FF0C10  031007FFFF0C10  03 10 07 FF 03 0C 10 031007FFFF0C10031007FFFF0C10 031007FFFF0F10031007FFFF0C10031007FF  030C10031007FF 030C10031007FFFF0C10   031007  FF FF 0C 1003   1007FF FF0C 10031007FFFF0F10 031007FFFF 0C10

类似这样一段十六进制的字符串,中间存在不规则分布的空格需要去掉,像031007FFFF0C10这样的7位十六进制字符串是我想获取的一组完整数据,03是起始位,怎么能高效的获取所有数据组?高效哈!

------解决方案--------------------
随手写的。
去空格:String.Replace(input," ","");
获取字符串:
List<string> result = new List<string>();
StringBuilder sb = new StringBuilder();
for(int i =0;i<str.Length;i+=1)
{
    sb.Append(str[i]);
    if(i%14==13)
    {
        result.Add(sb.ToString());
        sb.Clear();
    }
}
------解决方案--------------------
提速效果不超过30%的情况下,就可以用了,用StringBuilder实现字符串拼接虽然不能说是最快,但也很快了,循环本身只有单向的处理,因此速度也不存在问题。此外还有通过索引多次SubString的处理方式,不见得有比这样的快,彼此速度都差不多的情况下,这样循环写还可以在中间添加控制,即判断每次开始是否为“03”,虽然我没加。
------解决方案--------------------


            string s = "031007FFFF0C10  031007FFFF0F11 031007FF030C10031007FFFF0C10    03  1007 FF FF0C10  031007FFFF0C10  03 10 07 FF 03 0C 10 031007FFFF0C10031007FFFF0C10 031007FFFF0F10031007FFFF0C10031007FF  030C10031007FF 030C10031007FFFF0C10   031007  FF FF 0C 1003   1007FF FF0C 10031007FFFF0F10 031007FFFF 0C10"
.Replace(" ","");
            MatchCollection mc=   Regex.Matches(s,@"031007[0-9A-F]{8,8}");
            foreach (Match m in mc)
            {
                Console.WriteLine(m.Value);
            }

按你的要求,正则是最快的了,别听他扯蛋,只是之前少替换了空格。
------解决方案--------------------
突然想到一个最快的做法,只要一步即可,不需要去空格,还能确保空格以外的非法字符干扰:

        private List