您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 代码编程 >
    c#字符串包,支持打包、打包,依次取段内容、定位取段内容
    时间:2015-04-10 09:17 来源:Unity之家 作者:unity.jb51.net 浏览:收藏 挑错 推荐 打印


    直接贴出代码:


    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
        }
    }





    (责任编辑:脚印)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
    标签:Unity之家