c#字符串包,支持打包、打包,依次取段内容、定位取段内容

来源:互联网 发布:调色软件app 编辑:程序博客网 时间:2024/06/07 00:24
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Text.RegularExpressions;namespace XMPPMsg.Models{    /// <summary>    /// 通信包基类    /// </summary>    public class MessagePacketBase    {        //private StringBuilder _Body = new StringBuilder();        public MessagePacketBase()        {            Peek = 0;        }        public MessagePacketBase(string MsgPacket):this()        {            Regex regex = new Regex("(?<!\\\\),");            MatchCollection mc = regex.Matches(MsgPacket);            //mc[0].            string[] _2=regex.Split(MsgPacket);            foreach (string s in _2)            {                if (!string.IsNullOrEmpty(s))                {                    _Nodes.Add(MessageDecode(s));                }            }        }        #region //property        /// <summary>        /// 指针:下一个位置        /// </summary>        public int Peek { get; set; }        /// <summary>        /// 信息节集合        /// </summary>        List<string> _Nodes = new List<string>();        /// <summary>        /// 信息节列表        /// </summary>        public List<string> Nodes        {            get            {                return _Nodes;            }        }        #endregion        #region//global  function        public void Add(string _MessageNode)        {            _Nodes.Add(_MessageNode);        }        public void Insert(int _index,string _MessageNode)        {            _Nodes.Insert(_index, _MessageNode);        }        /// <summary>        /// 读取下一段内容        /// 如果已经到最后,返回空字符串        /// </summary>        /// <returns></returns>        public string Read()        {            if (Peek < _Nodes.Count && Peek > -1)            {                Peek++;                return _Nodes[Peek-1];            }            return "";        }        /// <summary>        /// 读取指定段内容        /// 如果位置超出上、下限,返回空字符串        /// </summary>        /// <param name="_pos">位置</param>        /// <returns></returns>        public string Read(int _pos)        {            if (_pos < _Nodes.Count && _pos>-1)            {                return _Nodes[_pos];            }            return "";        }        public override string ToString()        {                        StringBuilder _Body = new StringBuilder();            bool isfirst = true;            foreach (string s in _Nodes)            {                if (isfirst)                {                    isfirst = false;                    _Body.AppendFormat("{0}", MessageEncode(s));                }                else                {                    _Body.AppendFormat(",{0}", MessageEncode(s));                }                            }            return _Body.ToString();        }        #endregion        #region //private        /// <summary>        /// 编译        /// </summary>        /// <param name="_s"></param>        /// <returns></returns>        string MessageEncode(string _s)        {            return _s.Replace(",", "\\,");        }        /// <summary>        /// 反译        /// </summary>        /// <param name="_s"></param>        /// <returns></returns>        string MessageDecode(string _s)        {            return _s.Replace("\\,", ",");        }        #endregion    }}


原创粉丝点击