CultivateImmortal/Assets/Scripts/Framework/Util/TextUtil.cs

283 lines
8.6 KiB
C#
Raw Normal View History

2024-11-14 18:15:51 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Events;
/// <summary>
/// <20><><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܵ<EFBFBD>
/// </summary>
public class TextUtil
{
private static StringBuilder resultStr = new StringBuilder("");
#region <EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="str"><3E><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ַ<EFBFBD><D6B7><EFBFBD></param>
/// <param name="type"><3E><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ͣ<EFBFBD> 1-; 2-, 3-% 4-: 5-<2D>ո<EFBFBD> 6-| 7-_ </param>
/// <returns></returns>
public static string[] SplitStr(string str, int type = 1)
{
if (str == "")
return new string[0];
string newStr = str;
if (type == 1)
{
//Ϊ<>˱<EFBFBD><CBB1><EFBFBD>Ӣ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>
while (newStr.IndexOf("<22><>") != -1)
newStr = newStr.Replace("<22><>", ";");
return newStr.Split(';');
}
else if (type == 2)
{
//Ϊ<>˱<EFBFBD><CBB1><EFBFBD>Ӣ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>
while (newStr.IndexOf("<22><>") != -1)
newStr = newStr.Replace("<22><>", ",");
return newStr.Split(',');
}
else if (type == 3)
{
return newStr.Split('%');
}
else if (type == 4)
{
//Ϊ<>˱<EFBFBD><CBB1><EFBFBD>Ӣ<EFBFBD>ķ<EFBFBD><C4B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>
while (newStr.IndexOf("<22><>") != -1)
newStr = newStr.Replace("<22><>", ":");
return newStr.Split(':');
}
else if (type == 5)
{
return newStr.Split(' ');
}
else if (type == 6)
{
return newStr.Split('|');
}
else if (type == 7)
{
return newStr.Split('_');
}
return new string[0];
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="str"><3E><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ַ<EFBFBD><D6B7><EFBFBD></param>
/// <param name="type"><3E><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>ͣ<EFBFBD> 1-; 2-, 3-% 4-: 5-<2D>ո<EFBFBD> 6-| 7-_ </param>
/// <returns></returns>
public static int[] SplitStrToIntArr(string str, int type = 1)
{
//<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD>ֺ<EFBFBD><D6BA><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
string[] strs = SplitStr(str, type);
if (strs.Length == 0)
return new int[0];
//<2F><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ת<><D7AA><EFBFBD><EFBFBD> int<6E><74><EFBFBD><EFBFBD>
return Array.ConvertAll<string, int>(strs, (str) =>
{
return int.Parse(str);
});
}
/// <summary>
/// ר<><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD> <20><>int<6E><74><EFBFBD><EFBFBD>
/// </summary>
/// <param name="str"><3E><><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ַ<EFBFBD><D6B7><EFBFBD></param>
/// <param name="typeOne"><3E><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD> 1-; 2-, 3-% 4-: 5-<2D>ո<EFBFBD> 6-| 7-_ </param>
/// <param name="typeTwo"><3E><>ֵ<EFBFBD>Էָ<D4B7><D6B8><EFBFBD> 1-; 2-, 3-% 4-: 5-<2D>ո<EFBFBD> 6-| 7-_ </param>
/// <param name="callBack"><3E>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></param>
public static void SplitStrToIntArrTwice(string str, int typeOne, int typeTwo, UnityAction<int, int> callBack)
{
string[] strs = SplitStr(str, typeOne);
if (strs.Length == 0)
return;
int[] ints;
for (int i = 0; i < strs.Length; i++)
{
//<2F><><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
ints = SplitStrToIntArr(strs[i], typeTwo);
if (ints.Length == 0)
continue;
callBack.Invoke(ints[0], ints[1]);
}
}
/// <summary>
/// ר<><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD> <20><>string<6E><67><EFBFBD><EFBFBD>
/// </summary>
/// <param name="str"><3E><><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>ַ<EFBFBD><D6B7><EFBFBD></param>
/// <param name="typeOne"><3E><><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD> 1-; 2-, 3-% 4-: 5-<2D>ո<EFBFBD> 6-| 7-_ </param>
/// <param name="typeTwo"><3E><>ֵ<EFBFBD>Էָ<D4B7><D6B8><EFBFBD> 1-; 2-, 3-% 4-: 5-<2D>ո<EFBFBD> 6-| 7-_ </param>
/// <param name="callBack"><3E>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD></param>
public static void SplitStrTwice(string str, int typeOne, int typeTwo, UnityAction<string, string> callBack)
{
string[] strs = SplitStr(str, typeOne);
if (strs.Length == 0)
return;
string[] strs2;
for (int i = 0; i < strs.Length; i++)
{
//<2F><><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
strs2 = SplitStr(strs[i], typeTwo);
if (strs2.Length == 0)
continue;
callBack.Invoke(strs2[0], strs2[1]);
}
}
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20>õ<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD>油0<E6B2B9><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȳ<EFBFBD><C8B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E1B1A3>ԭʼ<D4AD><CABC>ֵ
/// </summary>
/// <param name="value"><3E><>ֵ</param>
/// <param name="len"><3E><><EFBFBD><EFBFBD></param>
/// <returns></returns>
public static string GetNumStr(int value, int len)
{
//tostring<6E>д<EFBFBD><D0B4><EFBFBD>һ<EFBFBD><D2BB> Dn <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>λn<CEBB><6E><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD> <20><><EFBFBD><EFBFBD>ǰ<EFBFBD>油0
return value.ToString($"D{len}");
}
/// <summary>
/// <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
/// <param name="value"><3E><><EFBFBD><EFBFBD><EFBFBD>ĸ<EFBFBD><C4B8><EFBFBD><EFBFBD><EFBFBD></param>
/// <param name="len"><3E><><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>nλ</param>
/// <returns></returns>
public static string GetDecimalStr(float value, int len)
{
//tostring<6E>д<EFBFBD><D0B4><EFBFBD>һ<EFBFBD><D2BB> Fn <20><><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λС<CEBB><D0A1>
return value.ToString($"F{len}");
}
/// <summary>
/// <20><><EFBFBD>ϴ<EFBFBD><CFB4>ϳ<EFBFBD><CFB3><EFBFBD><EFBFBD><EFBFBD> ת<><D7AA>Ϊ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
/// </summary>
/// <param name="num"><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ</param>
/// <returns>n<><6E><6E><C7A7> <20><> n<><6E><20><> 1000 3434 234</returns>
public static string GetBigDataToString(int num)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31> <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ʾ n<><6E><6E><C7A7>
if (num >= 100000000)
{
return BigDataChange(num, 100000000, "<22><>", <><C7A7>");
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><31> <20><>ô<EFBFBD><C3B4><EFBFBD><EFBFBD>ʾ n<><6E>
else if (num >= 10000)
{
return BigDataChange(num, 10000, "<22><>", "ǧ");
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ֱ<EFBFBD><D6B1><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>
else
return num.ToString();
}
/// <summary>
/// <20>Ѵ<EFBFBD><D1B4><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA><EFBFBD>ɶ<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>ƴ<EFBFBD><C6B4>
/// </summary>
/// <param name="num"><3E><>ֵ</param>
/// <param name="company"><3E>ָλ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 100000000<30><30>10000</param>
/// <param name="bigCompany"><3E><><EFBFBD><EFBFBD>λ <20>ڡ<EFBFBD><DAA1><EFBFBD></param>
/// <param name="littltCompany">С<><D0A1>λ <20><><EFBFBD><EFBFBD>ǧ</param>
/// <returns></returns>
private static string BigDataChange(int num, int company, string bigCompany, string littltCompany)
{
resultStr.Clear();
//<2F>м<EFBFBD><D0BC>ڡ<EFBFBD><DAA1><EFBFBD><EFBFBD><EFBFBD>
resultStr.Append(num / company);
resultStr.Append(bigCompany);
//<2F>м<EFBFBD>ǧ<EFBFBD>򡢼<EFBFBD>ǧ
int tmpNum = num % company;
//<2F><><EFBFBD>м<EFBFBD>ǧ<EFBFBD>򡢼<EFBFBD>ǧ
tmpNum /= (company / 10);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0
if(tmpNum != 0)
{
resultStr.Append(tmpNum);
resultStr.Append(littltCompany);
}
return resultStr.ToString();
}
#endregion
#region ʱ<EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><>תʱ<D7AA><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD><D4BC><EFBFBD>
/// </summary>
/// <param name="s"><3E><><EFBFBD><EFBFBD></param>
/// <param name="egZero"><3E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>0</param>
/// <param name="isKeepLen"><3E>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2λ</param>
/// <param name="hourStr">Сʱ<D0A1><CAB1>ƴ<EFBFBD><C6B4><EFBFBD>ַ<EFBFBD></param>
/// <param name="minuteStr"><3E><><EFBFBD>ӵ<EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>ַ<EFBFBD></param>
/// <param name="secondStr"><3E><><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>ַ<EFBFBD></param>
/// <returns></returns>
public static string SecondToHMS(int s, bool egZero = false, bool isKeepLen = false, string hourStr = "ʱ", string minuteStr = "<22><>", string secondStr = "<22><>")
{
//ʱ<><EFBFBD><E4B2BB><EFBFBD>и<EFBFBD><D0B8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǹ<EFBFBD><C7B8><EFBFBD>ֱ<EFBFBD>ӹ<EFBFBD>0
if (s < 0)
s = 0;
//<2F><><EFBFBD><EFBFBD>Сʱ
int hour = s / 3600;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ȥСʱ<D0A1><CAB1><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3><EFBFBD><EFBFBD>
int second = s % 3600;
//ʣ<><CAA3><EFBFBD><EFBFBD>תΪ<D7AA><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int minute = second / 60;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
second = s % 60;
//ƴ<><C6B4>
resultStr.Clear();
//<2F><><EFBFBD><EFBFBD>Сʱ<D0A1><CAB1>Ϊ0 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0
if (hour != 0 || !egZero)
{
resultStr.Append(isKeepLen?GetNumStr(hour, 2):hour);//<2F><><EFBFBD><EFBFBD><E5BCB8>Сʱ
resultStr.Append(hourStr);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD>Ϊ0 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><><EFBFBD><EFBFBD> Сʱ<D0A1><CAB1>Ϊ0
if(minute != 0 || !egZero || hour != 0)
{
resultStr.Append(isKeepLen?GetNumStr(minute,2): minute);//<2F><><EFBFBD><EFBFBD><E5BCB8><EFBFBD><EFBFBD>
resultStr.Append(minuteStr);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>벻Ϊ0 <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0 <20><><EFBFBD><EFBFBD> Сʱ<D0A1>ͷ<EFBFBD><CDB7>Ӳ<EFBFBD>Ϊ0
if(second != 0 || !egZero || hour != 0 || minute != 0)
{
resultStr.Append(isKeepLen?GetNumStr(second,2): second);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
resultStr.Append(secondStr);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><30>ʱ
if(resultStr.Length == 0)
{
resultStr.Append(0);
resultStr.Append(secondStr);
}
return resultStr.ToString();
}
/// <summary>
/// <20><>ת00:00:00<30><30>ʽ
/// </summary>
/// <param name="s"></param>
/// <param name="egZero"></param>
/// <returns></returns>
public static string SecondToHMS2(int s, bool egZero = false)
{
return SecondToHMS(s, egZero, true, ":", ":", "");
}
#endregion
}