美文网首页
每日一学31——Unity字符串拼接优化类

每日一学31——Unity字符串拼接优化类

作者: ShawnWeasley | 来源:发表于2020-08-14 08:57 被阅读0次

学习来源:https://blog.csdn.net/onelei1994/article/details/101054633

之前一直看有人说Unity中的字符串拼接会产生很大消耗,因此来学习一下字符串拼接的优化类,详细的可以参考上面这篇帖子,这里我们直接站在巨人的肩膀上摘取一下果实。
使用方法很简单:

using System.Text;
using UnityEngine;

public class Test : MonoBehaviour
{
    void Start()
    {
        //用法1
        Debug.Log(StringEx.Concat("Afff", "Bfff"));
        Debug.Log(StringEx.Concat("C", ""));
        //用法2
        StringBuilder stringBuilder = StringEx.GetShareStringBuilder();
        for (int i = 0; i < 100; i++)
        {
            stringBuilder.Append(i.ToString());
        }
        Debug.Log(stringBuilder.ToString());
    }
}

输出结果可以看到是拼接成功了(第三个0是其他地方输出的,忽略即可):


image.png

至于这玩意对性能的影响到底有多大,咱也懒得测啊,直接用就完事了~
原博的静态类缺少长度为0判断,因此直接运行上述案例会出现报错,改后的静态类代码如下:

using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine;

/// <summary>
/// 字符串优化类
/// </summary>
public static class StringEx
{
    private static StringBuilder stringBuilder = new StringBuilder();
    private static StringBuilder shareStringBuilder = new StringBuilder();

    /// <summary>
    /// 获取共享StringBuilder
    /// </summary>
    /// <returns></returns>
    public static StringBuilder GetShareStringBuilder()
    {
        if (shareStringBuilder.Length > 0)
            shareStringBuilder.Remove(0, stringBuilder.Length);
        return shareStringBuilder;
    }

    /// <summary>
    /// 合并字符串
    /// </summary>
    /// <param name="src"></param>
    /// <param name="args"></param>
    /// <returns></returns>
    public static string Format(string src, params object[] args)
    {
        if (stringBuilder.Length > 0)
            stringBuilder.Remove(0, stringBuilder.Length);
        stringBuilder.AppendFormat(src, args);
        return stringBuilder.ToString();
    }

    /// <summary>
    /// 合并字符串
    /// </summary>
    /// <param name="s1"></param>
    /// <param name="s2"></param>
    /// <returns></returns>
    public static string Concat(string s1, string s2)
    {
        if (stringBuilder.Length > 0)
            stringBuilder.Remove(0, stringBuilder.Length);
        stringBuilder.Append(s1);
        stringBuilder.Append(s2);
        return stringBuilder.ToString();
    }

    /// <summary>
    /// 合并字符串
    /// </summary>
    /// <param name="s1"></param>
    /// <param name="s2"></param>
    /// <param name="s3"></param>
    /// <returns></returns>
    public static string Concat(string s1, string s2, string s3)
    {
        if (stringBuilder.Length > 0)
            stringBuilder.Remove(0, stringBuilder.Length);
        stringBuilder.Append(s1);
        stringBuilder.Append(s2);
        stringBuilder.Append(s3);
        return stringBuilder.ToString();
    }

    /// <summary>
    /// 移除前缀字符串
    /// </summary>
    /// <param name="self"></param>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string RemovePrefixString(this string self, string str)
    {
        string strRegex = @"^(" + str + ")";
        return Regex.Replace(self, strRegex, "");
    }

    /// <summary>
    /// 移除后缀字符串
    /// </summary>
    /// <param name="self"></param>
    /// <param name="str"></param>
    /// <returns></returns>
    public static string RemoveSuffixString(this string self, string str)
    {
        string strRegex = @"(" + str + ")" + "$";
        return Regex.Replace(self, strRegex, "");
    }

    /// <summary>
    /// 匹配正则表达式
    /// </summary>
    /// <param name="slef"></param>
    /// <param name="pattern"></param>
    /// <returns></returns>
    public static bool RegexMatch(this string slef, string pattern)
    {
        Regex reg = new Regex(pattern);
        return reg.Match(slef).Success;
    }

    /// <summary>
    /// 是否为Email
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static bool IsEmail(this string self)
    {
        return self.RegexMatch(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
    }

    /// <summary>
    /// 是否为域名
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static bool IsDomain(this string self)
    {
        return self.RegexMatch(@"[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?");
    }

    /// <summary>
    /// 是否为域名
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static bool IsIP(this string self)
    {
        return self.RegexMatch(@"((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d))");
    }

    /// <summary>
    /// 是否为手机号码
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static bool IsMobilePhone(this string self)
    {
        return self.RegexMatch(@"^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$");
    }

    /// <summary>
    /// 转换为MD5, 加密结果"x2"结果为32位,"x3"结果为48位,"x4"结果为64位
    /// </summary>
    /// <param name="self"></param>
    /// <param name="flag"></param>
    /// <returns></returns>
    public static string ConvertToMD5(this string self, string flag = "x2")
    {
        byte[] sor = Encoding.UTF8.GetBytes(self);
        MD5 md5 = MD5.Create();
        byte[] result = md5.ComputeHash(sor);
        StringBuilder strbul = new StringBuilder(40);
        for (int i = 0; i < result.Length; i++)
        {
            strbul.Append(result[i].ToString(flag));
        }
        return strbul.ToString();
    }

    /// <summary>
    /// 转换为32位MD5
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static string ConvertToMD5_32(this string self)
    {
        return ConvertToMD5(self, "x2");
    }

    /// <summary>
    /// 转换为48位MD5
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static string ConvertToMD5_48(this string self)
    {
        return ConvertToMD5(self, "x3");
    }

    /// <summary>
    /// 转换为64位MD5
    /// </summary>
    /// <param name="self"></param>
    /// <returns></returns>
    public static string ConvertToMD5_64(this string self)
    {
        return ConvertToMD5(self, "x4");
    }

}

相关文章

网友评论

      本文标题:每日一学31——Unity字符串拼接优化类

      本文链接:https://www.haomeiwen.com/subject/dbdidktx.html