lua 格式化字符轉換成 C# 格式化字符,方法一:
/// <summary>
/// 將lua中的字符串穿換成C#字符串
/// </summary>
/// <param name="resStr"></param>
/// <param name="plist"></param>
/// <returns></returns>
string FormatLuaStr(string resStr, string[] plist)
{
int formatIndex = 0;
int paramIndex = 0;
do
{
formatIndex = resStr.IndexOf("%s", formatIndex);
if (formatIndex >= 0)
{
string newstr = resStr.Substring(0, formatIndex) + plist[paramIndex] + resStr.Substring(formatIndex + 2);
resStr = newstr;
}
else
{
break;
}
if (plist.Length <= paramIndex)
{
break;
}
formatIndex++;
paramIndex++;
} while (true);
return resStr;
}
lua 格式化字符轉換成 C# 格式化字符,方法二:
/// <summary>
/// lua 中的格式化字符
/// </summary>
static string[] LuaFormatArr = { "%s", "%u", "%02u", "%f", "%2f", "%d", "%c", "%o", "%g", "%G", "%q", "%x", "%X", "%e", "%E" };
/// <summary>
/// 將lua中的字符串穿換成C#字符串
/// 參考老方法: FormatLuaStr_old
/// </summary>
/// <param name="resStr"></param>
/// <param name="plist"></param>
/// <returns></returns>
public static string FormatLuaStr(string resStr, string[] plist)
{
int formatIndex = 0;
int paramIndex = 0;
int arrLen = LuaFormatArr.Length;
string markStr = "";
do
{
formatIndex = resStr.IndexOf("%", formatIndex);
markStr = "";
if (formatIndex >= 0)
{
int index = -1;
for (int i = 0; i < arrLen; i++)
{
index = resStr.IndexOf(LuaFormatArr[i], formatIndex);
if (index == formatIndex)
{
markStr = LuaFormatArr[i];
break;
}
}
if (index == formatIndex)
{
string newstr = resStr.Substring(0, formatIndex) + plist[paramIndex] + resStr.Substring(formatIndex + markStr.Length);
resStr = newstr;
if (plist.Length <= paramIndex)
{
break;
}
paramIndex++;
}
formatIndex++;
}
else
{
break;
}
} while (true);
return resStr;
}
lua 格式化字符轉換成 C# 格式化字符,方法三:
/// <summary>
/// 將Lua中的%d %u %s %02u轉換成C#的格式化字符串。
/// --tl
/// </summary>
/// <param name="resStr"></param>
/// <returns></returns>
public static string ReMakeResStr(string resStr)
{
string repStr1 = "{}";
string[] strArr = { "%s", "%u", "%d" };
int len = strArr.Length;
string temp1 = "";
for (int i = 0; i < len; i++)
{
temp1 = strArr[i];
resStr = resStr.Replace(temp1, repStr1);
}
string[] strArr2 = { repStr1, "%02u", "%02U" };
len = strArr2.Length;
int formatCount = 0;
int formatIndex = -1;
int markIndex = -1;
string markStr = "";
string formatStr = "";
do
{
formatIndex = -1;
markIndex = -1;
markStr = "";
formatStr = "";
string temp2 = "";
for (int idx = 0; idx < len; ++idx)
{
temp2 = strArr2[idx];
markIndex = resStr.IndexOf(temp2);
if (markIndex >= 0)
{
if (formatIndex < 0 || markIndex < formatIndex)
{
formatIndex = markIndex;
markStr = temp2;
}
}
}
if (formatIndex < 0)
{
break;
}
switch (markStr)
{
case "{}": formatStr = "{" + formatCount + "}"; break;
case "%02u":
case "%02U": formatStr = "{" + formatCount + ":D2}"; break;
}
resStr = resStr.Substring(0, formatIndex) + formatStr + resStr.Substring(formatIndex + markStr.Length);
formatCount++;
} while (true);
return resStr;
}
/// <summary>
/// 調用ReMakeResStr函數將 lua 中 resStr 格式化字符
/// { "%s", "%u", "%02u", "%f", "%2f", "%d", "%c", "%o", "%g", "%G", "%q", "%x", "%X", "%e", "%E" };
/// 轉換成C#中的 格式化字符 {0}
/// 再調用 FormatStr 獲得新的字符串
/// </summary>
/// <param name="resStr"></param>
/// <param name="plist"></param>
/// <returns></returns>
string FormatStr(string resStr, string[] plist)
{
string paramKey = resStr;
if (plist.Length == 1)
paramKey = string.Format(resStr, plist[0]);
else if (plist.Length == 2)
paramKey = string.Format(resStr, plist[0], plist[1]);
else if (plist.Length == 3)
paramKey = string.Format(resStr, plist[0], plist[1], plist[2]);
else if (plist.Length == 4)
paramKey = string.Format(resStr, plist[0], plist[1], plist[2], plist[3]);
else if (plist.Length == 5)
paramKey = string.Format(resStr, plist[0], plist[1], plist[2], plist[3], plist[4]);
else
{
for (int i = 0; i < plist.Length; i++)
{
string pat = "{" + i + "}";
paramKey = paramKey.Replace(pat, plist[i]);
}
}
return paramKey;
}