按照“规则”拆分字符串

来源:互联网 发布:数据有效性什么意思 编辑:程序博客网 时间:2024/05/17 22:25
 
public void SetData(string text){Init();UITools.SetCachedItemHide(mItems);labstring.Clear();ParseSymbol(text);if(labstring == null || labstring.Count == 0)return;if (mGrid == null || mItem == null)return;for (int i = labstring.Count-1; i >=0; i--){}UITools.GridReposition(mGrid);}List<string> labstring = new List<string> ();public  void ParseSymbol(string text){if (string.IsNullOrEmpty(text))return ;int limitHeight = 440;basFont.RequestCharactersInTexture(text, fontsize, FontStyle.Normal);CharacterInfo characterInfo;int width = 0;List<int> widths = new List<int>();for (int i = 0; i < text.Length; i++){char a = text[i];basFont.GetCharacterInfo(text[i], out characterInfo, fontsize);int advancewidth = characterInfo.advance;width += characterInfo.advance;widths.Add(width);}int idex = getNearString(widths, limitHeight);string startstring = "";string endstring = "";for (int i = 0; i < text.Length; i++){char a = text[i];if (i <= idex){startstring = startstring + a;}else{endstring = endstring + a;}}labstring.Add(startstring);if (endstring == ""){}else{ParseSymbol(endstring);}}public static int getNearString(List<int> words, int width){int top = 100000;int bottom = -100000;int topidex = 0;int bottomidex = 0;for (int i = 0; i < words.Count; i++){int a = words[i];//找到离5最近的左边最小数if (a < top && a >= width){top = a;topidex = i;continue;}//找到离5最近的右边最大数if (a > bottom && a <= width){bottom = a;bottomidex = i;continue;}}if (top == bottom){return topidex;}if ((top - width) >= (width - bottom)){return bottomidex;}else{return topidex;}}


效果如图


0 0
原创粉丝点击