Exemplo n.º 1
0
        /// <summary>
        /// 根据传入的已被替换过的内容,以及恢复特征信息,恢复原始的内容
        /// </summary>
        /// <param name="value"></param>
        /// <param name="revertInfo"></param>
        /// <returns></returns>
        public string Revert(string value, string version, string revertInfo)
        {
            if (string.IsNullOrEmpty(value))
            {
                return(string.Empty);
            }

            if (string.IsNullOrEmpty(revertInfo) || string.IsNullOrEmpty(version))
            {
                return(value);
            }

            ReplacedWordCollection words = ReplacedWordCollection.Parse(revertInfo);

            if (words.Count == 0)
            {
                return(value);
            }

            int           indexOffset = 0;
            StringBuilder builder     = new StringBuilder(value);

            foreach (ReplacedWord item in words)
            {
                int newIndex = item.Index + indexOffset;

                if (newIndex + item.Length > builder.Length)
                {
                    break;
                }

                builder.Remove(newIndex, item.Length);
                builder.Insert(newIndex, item.OriginalWord);

                indexOffset += item.OriginalWord.Length - item.Length;
            }

            return(builder.ToString());
        }