lua 格式化字符轉換成 C# 格式化字符

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;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章