你们好我是小唐!前两天分享了一个图文混排,就是聊天的时候用到的文字和表情一块儿输出,可是在处理字符串的时候的时候咱们都是按照从左到右的顺序进行的,个人聊天内容和其它人的聊天内容是有区别的,因此要作一些特别的处理。先看一下图就明白了:this
看我输入的,从左到右的输入顺序,其余人的聊天内容也是从左到右的,这个顺序是没有错误的,可是我本身的聊天内容倒是从右到左的,看一下两个输出的内容就知道图片的位置明显不对了,原本先输出的确实最后输出了,缘由是咱们从左到右的时候图片和文字都是左上对齐的,从右到左的输出顺序要右上对齐,这样怎么办呢?后来我本身举了一个小示例,看了一下,其实解决的时候没有那么麻烦,直接把咱们要处理的字符串先倒序排列一下在放在图文混排字符串中去处理,输出的内容就对了。spa
好比说: //原:{01}{02}你好{03}世界{04}
//运算:{04}世界{03}你好{02}{01}
//输出:{01}{02}你好{03}世界{04}code
这个运算就是倒序以后的内容,只是把图片和文字位置倒序,可是文字的组合却不倒序,再把运算的这个字符串放在图文混排的处理中去处理,输出后就获得咱们想要的效果了,这就是解决从右到左这个相反的方法:blog
倒序排列的代码:排序
<pre name="code" class="csharp">using UnityEngine; using System.Collections; using System.Collections.Generic; public class SortStrDeal : MonoBehaviour { static SortStrDeal current; //原:{01}{02}你好{03}世界{04} //运算:{04}世界{03}你好{02}{01} //输出:{01}{02}你好{03}世界{04} //原字符串 string Str="{01}{02}你好{3}世界{04}嘻嘻"; //截取后字符串 string NewStr=string.Empty; //排序后字符串 public static string SortStr=string.Empty; List<string> StrList=new List<string>(); // Use this for initialization void Start () { current = this; StrDeal(Str); <span style="white-space:pre"> </span>} public static void DealStr(string str) { current.StrDeal(str); } /// <summary> /// 把字符串截取放在StrList集合中 /// </summary> /// <param name="str">要截取的字符串</param> void StrDeal(string str) { if (string.IsNullOrEmpty(str)) { Sort(); return; } int StartIndex = str.IndexOf("{"); int EndIndex = str.IndexOf("}"); string text; if (StartIndex > -1) { text = str.Substring(0, StartIndex); } else { text=str; } //string text = str.Substring(0,StartIndex); //在图片以前是否存在文本 if (string.IsNullOrEmpty(text)) { string Imagestr = str.Substring(0, EndIndex + 1); if (StartIndex > -1) { StrList.Add(Imagestr); NewStr = str.Remove(0,Imagestr.Length); StrDeal(NewStr); } } else { StrList.Add(text); NewStr = str.Remove(0,text.Length); StrDeal(NewStr); } } /// <summary> /// 字符串倒叙排序 /// </summary> void Sort() { for (int i = StrList.Count-1; i >=0; i--) { SortStr+=StrList[i]; } StrList.Clear(); //这就是倒序排列后的字符串 Debug.LogError(SortStr); } }好了,但愿对大家有所帮助。