还是比较简单的功能,在data的byte数组搜索pattern出现的位置。当然这里可以对该功能进行扩展,例如实现忽略大小写,并防止异常情况等等。


        public static List<int> indexOf(byte[] data, byte[] pattern)
        {
            List<int> matchedPos = new List<int>();

            if (data.Length == 0 || data.Length < pattern.Length) return matchedPos;

            int end = data.Length - pattern.Length;
            bool matched = false;

            for (int i = 0; i <= end; i++)
            {
                for (int j= 0; j < pattern.Length || !(matched = (j==pattern.Length)); j++)
                {
                    if (data[i + j] != pattern[j]) break;
                }
                if (matched)
                {
                    matched = false;
                    matchedPos.Add(i);
                }
            }
            return matchedPos;
        }

返回的结果是一个List<int>,如果其大小为0,则说明搜索失败。

这里留意内侧for(;;)的用法,通常判断到结尾时会认为正确并置相应的Boolean值,考虑到“||”的旁路,即只有在内侧for的“||”左边为False时才会执行右边的语句,于是我在右边语句中实现Boolean值的重置,然后再判断该位置是否匹配。

posted on 2009-11-09 17:35  Cruisoring  阅读(2497)  评论(0编辑  收藏  举报