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