using System.Collections;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;
using UnityEngine.UI;
public class test : MonoBehaviour
{/// <summary>
/// 用于匹配标点符号
/// </summary>
//private readonly string strRegex = @"(\!|\?|\,|\。|\《|\》|\(|\)|\(|\)|\:|\“|\‘|\、|\;|\+|\-|\·|\#|\¥|\;|\”|\【|\】|\——)";
/// <summary>
/// 首行标点符合
/// </summary>
private readonly string strRegex1 = @"(\!|\?|\,|\。|\.|\《|\》|\)|\)|\:|\“|\‘|\、|\;|\.|\;|\+|\-|\·|\#|\¥|\;|\”|\【|\】|\|\<|\>)";
/// <summary>
/// 用于存储text组件中的内容
/// </summary>
private StringBuilder textSB = null;
/// <summary>
/// 用于存储text生成器中的内容
/// </summary>
private IList<UILineInfo> textLineInfo;
public IEnumerator SymbolProcess(Text textComponent, string textStr)
{
textComponent.text = textStr.Replace(" ","");
textComponent.text = textComponent.text.Replace(".",".");
while (true)
{
yield return 0;
textLineInfo = textComponent.cachedTextGenerator.lines;
textSB = new StringBuilder(textComponent.text);
for (int i = 1; i < textLineInfo.Count; i++)
{
bool isMark = Regex.IsMatch(textComponent.text[textLineInfo[i].startCharIdx].ToString(), strRegex1);
if (isMark)
{
Debug.Log(textComponent.text[textLineInfo[i].startCharIdx]);
if (textComponent.text[textLineInfo[i].startCharIdx - 1].ToString() == "\n")
{
textSB.Insert(textLineInfo[i].startCharIdx - 1, "\u3000");
StartCoroutine(SymbolProcess(textComponent, textSB.ToString()));
break;
}
else if (Regex.IsMatch(textComponent.text[textLineInfo[i].startCharIdx - 1].ToString(), strRegex1) & Regex.IsMatch(textComponent.text[textLineInfo[i].startCharIdx - 2].ToString(), strRegex1))
{
textSB.Insert(textLineInfo[i].startCharIdx - 3, "\u3000");
StartCoroutine(SymbolProcess(textComponent, textSB.ToString()));
break;
}
else if (Regex.IsMatch(textComponent.text[textLineInfo[i].startCharIdx - 1].ToString(), strRegex1))
{
textSB.Insert(textLineInfo[i].startCharIdx - 2, "\u3000");
StartCoroutine(SymbolProcess(textComponent, textSB.ToString()));
break;
}
else
{
textSB.Insert(textLineInfo[i].startCharIdx - 1, "\u3000");
StartCoroutine(SymbolProcess(textComponent, textSB.ToString()));
break;
}
}
}
break;
}
}
}
对UnityText文本内容的行首中文标点剔除
于 2023-04-04 11:17:09 首次发布