【超详细】C#自定义工具类-StringHelper

目录

StringHelper工具类

1.主要功能

1.基础工具方法:null/空判断

2.字符串截取与分割:安全处理子串

3.格式转换与类型转换:数据格式处理

4.正则表达式与验证:规则校验与字符过滤

5.数据脱敏与加密:隐私信息保护

6.大小写转换:文本格式标准化

7.Unity文本样式处理

2.完整代码

3.测试


本篇文章分享一下工具类StringHelper。

StringHelper工具类

1.主要功能

1.基础工具方法:null/空判断

提供字符串最基础的有效性校验,避免空引用异常。

cs 复制代码
/// <summary>
/// 判断字符串是否为 null、空字符串或仅包含空白字符(空格、制表符等)
/// </summary>
/// <param name="str">待判断的字符串</param>
/// <returns>若为 null/空/纯空白则返回 true,否则返回 false</returns>
public static bool IsNullOrEmpty(this string str)
{
    return string.IsNullOrEmpty(str);
}

2.字符串截取与分割:安全处理子串

解决原生Substring方法易越界的问题,同时提供场景化的分割能力。

|--------------------|--------------------------|
| 方法名 | 核心功能 |
| SubstringSafe | 安全截取指定长度,超长时可加后缀(如 ...) |
| SplitFromLeft | 简化左侧截取(封装 SubstringSafe) |
| SplitFromRight | 安全截取右侧指定长度 |
| GetSplitLastString | 按分隔符分割后,取最后一个非空子串 |

cs 复制代码
/// <summary>
/// 安全截取字符串,避免因长度不足导致的异常
/// </summary>
/// <param name="str">待截取的字符串</param>
/// <param name="length">最大截取长度(必须大于0,否则返回空)</param>
/// <param name="suffix">当字符串被截断时添加的后缀(如 "...", 默认为空)</param>
/// <returns>
/// 若字符串长度 ≤ 截取长度,返回原字符串;
/// 否则返回前 length 个字符 + 后缀;
/// 若字符串为空或 length ≤ 0,返回空字符串
/// </returns>
public static string SubstringSafe(this string str, int length, string suffix = "")
{
    if (str.IsNullOrEmpty() || length <= 0) return "";
    return str.Length <= length ? str : str.Substring(0, length) + suffix;
}
/// <summary>
/// 从字符串左侧截取指定长度(封装 SubstringSafe,简化左侧截取调用)
/// </summary>
/// <param name="str">待截取的字符串</param>
/// <param name="length">左侧截取长度</param>
/// <returns>左侧截取的子串(长度不足时返回原字符串)</returns>
public static string SplitFromLeft(this string str, int length)
{
    return str.SubstringSafe(length);
}
/// <summary>
/// 从字符串右侧截取指定长度(安全处理,避免越界)
/// </summary>
/// <param name="str">待截取的字符串</param>
/// <param name="length">右侧截取长度</param>
/// <returns>
/// 若字符串长度 ≤ 截取长度,返回原字符串;
/// 否则返回从右侧第 length 个字符开始的子串;
/// 若字符串为空或 length ≤ 0,返回空字符串
/// </returns>
public static string SplitFromRight(this string str, int length)
{
    if (str.IsNullOrEmpty() || length <= 0) return "";
    return str.Length <= length ? str : str.Substring(str.Length - length, length);
}
/// <summary>
/// 按指定分隔符分割字符串后,返回最后一个非空子串
/// </summary>
/// <param name="fullString">待分割的完整字符串</param>
/// <param name="separator">分割符(支持多个字符,如 '/', '\\')</param>
/// <returns>
/// 分割后的最后一个非空子串;
/// 若分割后无有效子串,返回原字符串;
/// 若原字符串为空,返回空
/// </returns>
public static string GetSplitLastString(this string fullString, params char[] separator)
{
    if (fullString.IsNullOrEmpty()) return fullString;
    //分割时忽略空项(如连续分隔符产生的空字符串)
    string[] parts = fullString.Split(separator, StringSplitOptions.RemoveEmptyEntries);
    return parts.Length == 0 ? fullString : parts[parts.Length - 1];
}

3.格式转换与类型转换:数据格式处理

实现字符串与常用类型的安全转换,以及基础格式清洗。

1)类型转换:

●ToInt:将字符串转为int,失败时返回默认值(避免int.Parse抛异常)。

●ToDateTime:将字符串转为DateTime,失败时返回默认值(适配日期文本解析)。

2)格式清洗:

●RemoveSpaces:移除字符串中所有空格(包括中间和首尾空格)。

cs 复制代码
/// <summary>
/// 将字符串转换为 int 类型,转换失败时返回默认值
/// </summary>
/// <param name="str">待转换的字符串(如 "123")</param>
/// <param name="defaultValue">转换失败时的默认值(默认为 0)</param>
/// <returns>转换后的 int 值,或默认值</returns>
public static int ToInt(this string str, int defaultValue = 0)
{
    return int.TryParse(str, out int result) ? result : defaultValue;
}
/// <summary>
/// 将字符串转换为 DateTime 类型,转换失败时返回默认值
/// </summary>
/// <param name="str">待转换的字符串(如 "2025-10-16")</param>
/// <param name="defaultValue">转换失败时的默认值(默认为 DateTime.MinValue)</param>
/// <returns>转换后的 DateTime 值,或默认值</returns>
public static DateTime ToDateTime(this string str, DateTime defaultValue = default)
{
    return DateTime.TryParse(str, out DateTime result) ? result : defaultValue;
}
/// <summary>
/// 移除字符串中所有空格(包括中间空格、首尾空格)
/// </summary>
/// <param name="str">待处理的字符串(如 "a b c")</param>
/// <returns>移除空格后的字符串(如 "abc"),原字符串为 null 则返回空</returns>
public static string RemoveSpaces(this string str)
{
    return str?.Replace(" ", "") ?? "";
}

4.正则表达式与验证:规则校验与字符过滤

基于正则实现常见数据格式校验,以及特殊字符处理。

1)格式验证:

●IsMatch:通用正则匹配(判断字符串是否符合自定义正则规则)。

●IsEmail:校验邮箱格式(使用^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$匹配常见邮箱)。

●IsPhoneNumber:校验中国手机号(11位数字,以13-19开头)。

2)字符处理:

●ReplaceSpecialChars:移除预设的特殊字符(如!@#$%),用于过滤非法输入。

●EscapeSpecialChars:转义正则中的特殊字符(如.→\.),避免正则语法错误。

cs 复制代码
/// <summary>
/// </summary>
/// <param name="str">待匹配的字符串</param>
/// <param name="pattern">正则表达式模式(如 @"^\d+$" 匹配纯数字)</param>
/// <returns>
/// 若字符串和模式均非空且匹配成功,返回 true;
/// 否则返回 false(包括字符串/模式为空的情况)
/// </returns>
public static bool IsMatch(this string str, string pattern)
{
    if (str.IsNullOrEmpty() || pattern.IsNullOrEmpty()) return false;
    return Regex.IsMatch(str, pattern);
}
/// <summary>
/// 判断字符串是否为合法的邮箱格式(基础校验)
/// </summary>
/// <param name="str">待验证的字符串(如 "test@example.com")</param>
/// <returns>若为合法邮箱格式返回 true,否则返回 false</returns>
public static bool IsEmail(this string str)
{
    //正则说明:支持字母、数字、下划线、减号及域名格式(如 user-name@sub.domain.com)
    return str.IsMatch(@"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$");
}
/// <summary>
/// 判断字符串是否为合法的中国手机号格式(11位数字,以13-19开头)
/// </summary>
/// <param name="str">待验证的字符串(如 "13800138000")</param>
/// <returns>若为合法手机号返回 true,否则返回 false</returns>
public static bool IsPhoneNumber(this string str)
{
    return str.IsMatch(@"^1[3-9]\d{9}$");
}
/// <summary>
/// 需要过滤的特殊字符集(正则表达式)
/// 包含:[]{}!@#$%^""'&*()?=&:;,.|
/// </summary>
private const string SpecialChars = @"[\[\]{}!@#$%^""'&*()?=&:;,.|]";
/// <summary>
/// 移除字符串中的特殊字符(替换为空白),用于过滤非法输入
/// </summary>
/// <param name="s">待处理的字符串(如 "user@#name")</param>
/// <returns>移除特殊字符后的字符串(如 "username")</returns>
public static string ReplaceSpecialChars(this string s)
{
    return s.IsNullOrEmpty() ? s : Regex.Replace(s, SpecialChars, "");
}
/// <summary>
/// 转义字符串中的正则特殊字符(如 .*+?^${}()|[]\),避免正则匹配时语法错误
/// </summary>
/// <param name="s">待转义的字符串(如 "a.b*c")</param>
/// <returns>转义后的字符串(如 "a\.b\*c")</returns>
public static string EscapeSpecialChars(this string s)
{
    if (s.IsNullOrEmpty()) return s;
    return Regex.Escape(s);
}

想要了解正则表达式,可以参考【一文了解】正则表达式

5.数据脱敏与加密:隐私信息保护

对敏感信息进行格式化处理,隐藏部分内容以保障隐私。

●MaskPhone:手机号脱敏(保留前3位和后4位,中间用****替换,如138****8000)。

●MaskName:姓名脱敏(保留姓氏,其余用*替换,如张*、李**)。

cs 复制代码
/// <summary>
/// 手机号脱敏处理:保留前3位和后4位,中间4位替换为 "*"
/// </summary>
/// <param name="phone">待脱敏的手机号(如 "13800138000")</param>
/// <returns>
/// 脱敏后的手机号(如 "138****8000");
/// 若输入非有效手机号或为空,返回原字符串
/// </returns>
public static string MaskPhone(this string phone)
{
    if (phone.IsNullOrEmpty() || !phone.IsPhoneNumber()) return phone;
    return phone.Substring(0, 3) + "****" + phone.Substring(7);
}
/// <summary>
/// 姓名脱敏处理:保留姓氏,其余字符替换为 "*"
/// </summary>
/// <param name="name">待脱敏的姓名(如 "张三"、"李四光")</param>
/// <returns>
/// 脱敏后的姓名(如 "张*"、"李**");
/// 若姓名为空或单字,返回原字符串
/// </returns>
public static string MaskName(this string name)
{
    if (name.IsNullOrEmpty()) return name;
    return name.Length == 1 ? name : name[0] + new string('*', name.Length - 1);
}

6.大小写转换:文本格式标准化

提供精细化的大小写调整能力,满足不同场景的文本样式需求。

●FirstCharToUpper:仅首字母大写(如hello→Hello)。

●FirstCharToLower:仅首字母小写(如Hello→hello)。

●ToTitleCase:每个单词首字母大写(按空格分割,如helloworld→HelloWorld)。

cs 复制代码
/// <summary>
/// 将字符串首字母转换为大写,其余字符保持不变
/// </summary>
/// <param name="str">待转换的字符串(如 "hello")</param>
/// <returns>首字母大写的字符串(如 "Hello"),空字符串返回原字符串</returns>
public static string FirstCharToUpper(this string str)
{
    if (str.IsNullOrEmpty()) return str;
    return char.ToUpper(str[0]) + (str.Length > 1 ? str.Substring(1) : "");
}
/// <summary>
/// 将字符串首字母转换为小写,其余字符保持不变
/// </summary>
/// <param name="str">待转换的字符串(如 "Hello")</param>
/// <returns>首字母小写的字符串(如 "hello"),空字符串返回原字符串</returns>
public static string FirstCharToLower(this string str)
{
    if (str.IsNullOrEmpty()) return str;
    return char.ToLower(str[0]) + (str.Length > 1 ? str.Substring(1) : "");
}
/// <summary>
/// 将字符串中每个单词的首字母转换为大写(按空格分割单词)
/// </summary>
/// <param name="str">待转换的字符串(如 "hello world")</param>
/// <returns>每个单词首字母大写的字符串(如 "Hello World"),空字符串返回原字符串</returns>
public static string ToTitleCase(this string str)
{
    if (str.IsNullOrEmpty()) return str;
    //按空格分割单词,忽略空项(如连续空格)
    string[] words = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
    for (int i = 0; i < words.Length; i++)
    {
        words[i] = words[i].FirstCharToUpper();//复用首字母大写方法
    }
    return string.Join(" ", words);//拼接为完整字符串
}

7.Unity文本样式处理

生成UI文本支持的HTML样式标签。

●AddColor:为文本添加颜色(将UnityColor转为RGB十六进制,生成<color=#FF0000>文本</color>)。

●AddBold:为文本添加加粗样式(生成<b>文本</b>)。

●AddItalic:为文本添加斜体样式(生成<i>文本</i>)。

cs 复制代码
/// <summary>
/// 为字符串添加 Unity UI 支持的 HTML 颜色样式(如 <color=#FF0000>文本</color>)
/// </summary>
/// <param name="message">需要添加颜色的文本</param>
/// <param name="color">Unity Color 类型的颜色(如 Color.red)</param>
/// <returns>包含颜色样式的字符串,原文本为空则返回原字符串</returns>
public static string AddColor(this string message, Color color)
{
    if (message.IsNullOrEmpty()) return message;
    string hex = ColorUtility.ToHtmlStringRGB(color);//转换 Color 为 RGB 十六进制(如 "FF0000")
    return $"<color=#{hex}>{message}</color>";
}
/// <summary>
/// 为字符串添加 Unity UI 支持的 HTML 加粗样式(如 <b>文本</b>)
/// </summary>
/// <param name="message">需要加粗的文本</param>
/// <returns>包含加粗样式的字符串,原文本为空则返回原字符串</returns>
public static string AddBold(this string message)
{
    return message.IsNullOrEmpty() ? message : $"<b>{message}</b>";
}
/// <summary>
/// 为字符串添加 Unity UI 支持的 HTML 斜体样式(如 <i>文本</i>)
/// </summary>
/// <param name="message">需要斜体的文本</param>
/// <returns>包含斜体样式的字符串,原文本为空则返回原字符串</returns>
public static string AddItalic(this string message)
{
    return message.IsNullOrEmpty() ? message : $"<i>{message}</i>";
}

2.完整代码

cs 复制代码
/// <summary>
/// StringHelper工具类
/// 封装常用字符串处理功能:通用字符串操作、数据验证、格式转换、Unity UI文本处理等
/// </summary>
public static class StringHelper
{
    #region 基础工具方法
    /// <summary>
    /// 判断字符串是否为 null、空字符串或仅包含空白字符(空格、制表符等)
    /// </summary>
    /// <param name="str">待判断的字符串</param>
    /// <returns>若为 null/空/纯空白则返回 true,否则返回 false</returns>
    public static bool IsNullOrEmpty(this string str)
    {
        return string.IsNullOrEmpty(str);
    }
    #endregion

    #region 字符串截取与分割
    /// <summary>
    /// 安全截取字符串,避免因长度不足导致的异常
    /// </summary>
    /// <param name="str">待截取的字符串</param>
    /// <param name="length">最大截取长度(必须大于0,否则返回空)</param>
    /// <param name="suffix">当字符串被截断时添加的后缀(如 "...", 默认为空)</param>
    /// <returns>
    /// 若字符串长度 ≤ 截取长度,返回原字符串;
    /// 否则返回前 length 个字符 + 后缀;
    /// 若字符串为空或 length ≤ 0,返回空字符串
    /// </returns>
    public static string SubstringSafe(this string str, int length, string suffix = "")
    {
        if (str.IsNullOrEmpty() || length <= 0) return "";
        return str.Length <= length ? str : str.Substring(0, length) + suffix;
    }
    /// <summary>
    /// 从字符串左侧截取指定长度(封装 SubstringSafe,简化左侧截取调用)
    /// </summary>
    /// <param name="str">待截取的字符串</param>
    /// <param name="length">左侧截取长度</param>
    /// <returns>左侧截取的子串(长度不足时返回原字符串)</returns>
    public static string SplitFromLeft(this string str, int length)
    {
        return str.SubstringSafe(length);
    }
    /// <summary>
    /// 从字符串右侧截取指定长度(安全处理,避免越界)
    /// </summary>
    /// <param name="str">待截取的字符串</param>
    /// <param name="length">右侧截取长度</param>
    /// <returns>
    /// 若字符串长度 ≤ 截取长度,返回原字符串;
    /// 否则返回从右侧第 length 个字符开始的子串;
    /// 若字符串为空或 length ≤ 0,返回空字符串
    /// </returns>
    public static string SplitFromRight(this string str, int length)
    {
        if (str.IsNullOrEmpty() || length <= 0) return "";
        return str.Length <= length ? str : str.Substring(str.Length - length, length);
    }
    /// <summary>
    /// 按指定分隔符分割字符串后,返回最后一个非空子串
    /// </summary>
    /// <param name="fullString">待分割的完整字符串</param>
    /// <param name="separator">分割符(支持多个字符,如 '/', '\\')</param>
    /// <returns>
    /// 分割后的最后一个非空子串;
    /// 若分割后无有效子串,返回原字符串;
    /// 若原字符串为空,返回空
    /// </returns>
    public static string GetSplitLastString(this string fullString, params char[] separator)
    {
        if (fullString.IsNullOrEmpty()) return fullString;
        //分割时忽略空项(如连续分隔符产生的空字符串)
        string[] parts = fullString.Split(separator, StringSplitOptions.RemoveEmptyEntries);
        return parts.Length == 0 ? fullString : parts[parts.Length - 1];
    }
    #endregion

    #region 格式转换与类型转换
    /// <summary>
    /// 将字符串转换为 int 类型,转换失败时返回默认值
    /// </summary>
    /// <param name="str">待转换的字符串(如 "123")</param>
    /// <param name="defaultValue">转换失败时的默认值(默认为 0)</param>
    /// <returns>转换后的 int 值,或默认值</returns>
    public static int ToInt(this string str, int defaultValue = 0)
    {
        return int.TryParse(str, out int result) ? result : defaultValue;
    }
    /// <summary>
    /// 将字符串转换为 DateTime 类型,转换失败时返回默认值
    /// </summary>
    /// <param name="str">待转换的字符串(如 "2025-10-16")</param>
    /// <param name="defaultValue">转换失败时的默认值(默认为 DateTime.MinValue)</param>
    /// <returns>转换后的 DateTime 值,或默认值</returns>
    public static DateTime ToDateTime(this string str, DateTime defaultValue = default)
    {
        return DateTime.TryParse(str, out DateTime result) ? result : defaultValue;
    }
    /// <summary>
    /// 移除字符串中所有空格(包括中间空格、首尾空格)
    /// </summary>
    /// <param name="str">待处理的字符串(如 "a b c")</param>
    /// <returns>移除空格后的字符串(如 "abc"),原字符串为 null 则返回空</returns>
    public static string RemoveSpaces(this string str)
    {
        return str?.Replace(" ", "") ?? "";
    }
    #endregion

    #region 正则表达式与验证
    /// <summary>
    /// </summary>
    /// <param name="str">待匹配的字符串</param>
    /// <param name="pattern">正则表达式模式(如 @"^\d+$" 匹配纯数字)</param>
    /// <returns>
    /// 若字符串和模式均非空且匹配成功,返回 true;
    /// 否则返回 false(包括字符串/模式为空的情况)
    /// </returns>
    public static bool IsMatch(this string str, string pattern)
    {
        if (str.IsNullOrEmpty() || pattern.IsNullOrEmpty()) return false;
        return Regex.IsMatch(str, pattern);
    }
    /// <summary>
    /// 判断字符串是否为合法的邮箱格式(基础校验)
    /// </summary>
    /// <param name="str">待验证的字符串(如 "test@example.com")</param>
    /// <returns>若为合法邮箱格式返回 true,否则返回 false</returns>
    public static bool IsEmail(this string str)
    {
        //正则说明:支持字母、数字、下划线、减号及域名格式(如 user-name@sub.domain.com)
        return str.IsMatch(@"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$");
    }
    /// <summary>
    /// 判断字符串是否为合法的中国手机号格式(11位数字,以13-19开头)
    /// </summary>
    /// <param name="str">待验证的字符串(如 "13800138000")</param>
    /// <returns>若为合法手机号返回 true,否则返回 false</returns>
    public static bool IsPhoneNumber(this string str)
    {
        return str.IsMatch(@"^1[3-9]\d{9}$");
    }
    /// <summary>
    /// 需要过滤的特殊字符集(正则表达式)
    /// 包含:[]{}!@#$%^""'&*()?=&:;,.|
    /// </summary>
    private const string SpecialChars = @"[\[\]{}!@#$%^""'&*()?=&:;,.|]";
    /// <summary>
    /// 移除字符串中的特殊字符(替换为空白),用于过滤非法输入
    /// </summary>
    /// <param name="s">待处理的字符串(如 "user@#name")</param>
    /// <returns>移除特殊字符后的字符串(如 "username")</returns>
    public static string ReplaceSpecialChars(this string s)
    {
        return s.IsNullOrEmpty() ? s : Regex.Replace(s, SpecialChars, "");
    }
    /// <summary>
    /// 转义字符串中的正则特殊字符(如 .*+?^${}()|[]\),避免正则匹配时语法错误
    /// </summary>
    /// <param name="s">待转义的字符串(如 "a.b*c")</param>
    /// <returns>转义后的字符串(如 "a\.b\*c")</returns>
    public static string EscapeSpecialChars(this string s)
    {
        if (s.IsNullOrEmpty()) return s;
        return Regex.Escape(s);
    }
    #endregion

    #region 数据脱敏与加密
    /// <summary>
    /// 手机号脱敏处理:保留前3位和后4位,中间4位替换为 "*"
    /// </summary>
    /// <param name="phone">待脱敏的手机号(如 "13800138000")</param>
    /// <returns>
    /// 脱敏后的手机号(如 "138****8000");
    /// 若输入非有效手机号或为空,返回原字符串
    /// </returns>
    public static string MaskPhone(this string phone)
    {
        if (phone.IsNullOrEmpty() || !phone.IsPhoneNumber()) return phone;
        return phone.Substring(0, 3) + "****" + phone.Substring(7);
    }
    /// <summary>
    /// 姓名脱敏处理:保留姓氏,其余字符替换为 "*"
    /// </summary>
    /// <param name="name">待脱敏的姓名(如 "张三"、"李四光")</param>
    /// <returns>
    /// 脱敏后的姓名(如 "张*"、"李**");
    /// 若姓名为空或单字,返回原字符串
    /// </returns>
    public static string MaskName(this string name)
    {
        if (name.IsNullOrEmpty()) return name;
        return name.Length == 1 ? name : name[0] + new string('*', name.Length - 1);
    }
    #endregion

    #region 大小写转换
    /// <summary>
    /// 将字符串首字母转换为大写,其余字符保持不变
    /// </summary>
    /// <param name="str">待转换的字符串(如 "hello")</param>
    /// <returns>首字母大写的字符串(如 "Hello"),空字符串返回原字符串</returns>
    public static string FirstCharToUpper(this string str)
    {
        if (str.IsNullOrEmpty()) return str;
        return char.ToUpper(str[0]) + (str.Length > 1 ? str.Substring(1) : "");
    }
    /// <summary>
    /// 将字符串首字母转换为小写,其余字符保持不变
    /// </summary>
    /// <param name="str">待转换的字符串(如 "Hello")</param>
    /// <returns>首字母小写的字符串(如 "hello"),空字符串返回原字符串</returns>
    public static string FirstCharToLower(this string str)
    {
        if (str.IsNullOrEmpty()) return str;
        return char.ToLower(str[0]) + (str.Length > 1 ? str.Substring(1) : "");
    }
    /// <summary>
    /// 将字符串中每个单词的首字母转换为大写(按空格分割单词)
    /// </summary>
    /// <param name="str">待转换的字符串(如 "hello world")</param>
    /// <returns>每个单词首字母大写的字符串(如 "Hello World"),空字符串返回原字符串</returns>
    public static string ToTitleCase(this string str)
    {
        if (str.IsNullOrEmpty()) return str;
        //按空格分割单词,忽略空项(如连续空格)
        string[] words = str.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
        for (int i = 0; i < words.Length; i++)
        {
            words[i] = words[i].FirstCharToUpper();//复用首字母大写方法
        }
        return string.Join(" ", words);//拼接为完整字符串
    }
    #endregion

    #region Unity 文本样式处理
    /// <summary>
    /// 为字符串添加 Unity UI 支持的 HTML 颜色样式(如 <color=#FF0000>文本</color>)
    /// </summary>
    /// <param name="message">需要添加颜色的文本</param>
    /// <param name="color">Unity Color 类型的颜色(如 Color.red)</param>
    /// <returns>包含颜色样式的字符串,原文本为空则返回原字符串</returns>
    public static string AddColor(this string message, Color color)
    {
        if (message.IsNullOrEmpty()) return message;
        string hex = ColorUtility.ToHtmlStringRGB(color);//转换 Color 为 RGB 十六进制(如 "FF0000")
        return $"<color=#{hex}>{message}</color>";
    }
    /// <summary>
    /// 为字符串添加 Unity UI 支持的 HTML 加粗样式(如 <b>文本</b>)
    /// </summary>
    /// <param name="message">需要加粗的文本</param>
    /// <returns>包含加粗样式的字符串,原文本为空则返回原字符串</returns>
    public static string AddBold(this string message)
    {
        return message.IsNullOrEmpty() ? message : $"<b>{message}</b>";
    }
    /// <summary>
    /// 为字符串添加 Unity UI 支持的 HTML 斜体样式(如 <i>文本</i>)
    /// </summary>
    /// <param name="message">需要斜体的文本</param>
    /// <returns>包含斜体样式的字符串,原文本为空则返回原字符串</returns>
    public static string AddItalic(this string message)
    {
        return message.IsNullOrEmpty() ? message : $"<i>{message}</i>";
    }
    #endregion
}

3.测试

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StringTest : MonoBehaviour
{
    private void Start()
    {
        //基础工具方法
        string str1 = "1234567890";
        Debug.Log($"str1:{str1}");
        Debug.Log(StringHelper.IsNullOrEmpty(str1));

        //字符串截取与分割
        string str2 = "abcdefgh";
        Debug.Log(StringHelper.SubstringSafe(str2,3,"..."));
        Debug.Log(StringHelper.SplitFromLeft(str2,5));
        Debug.Log(StringHelper.SplitFromRight(str2,2));

        string str3 = "hello/c#/hello/world";
        Debug.Log($"str2:{str3}");
        Debug.Log(StringHelper.GetSplitLastString(str3,'/'));

        //格式转换与类型转换
        string str4 = "09";
        Debug.Log($"str4:{str4}");
        Debug.Log($"str3:{StringHelper.ToInt(str3)},str4:{StringHelper.ToInt(str4)}");

        string str5 = "2025/10/17 00:00:00";
        Debug.Log($"str5:{str5}");
        Debug.Log($"str3:{StringHelper.ToDateTime(str3)},str4:{StringHelper.ToDateTime(str5)}");

        string str6 = "hello world";
        Debug.Log($"str6:{str6}");
        Debug.Log(StringHelper.RemoveSpaces(str6));

        //正则表达式与验证
        Debug.Log($"str1是否全是数字?{StringHelper.IsMatch(str1,@"^\d+$")}");
        Debug.Log($"str1是否是邮箱?{StringHelper.IsEmail(str1)}");

        string str7 = "13111445566";
        Debug.Log($"str7:{str7}");
        Debug.Log($"str7是否是手机号?{StringHelper.IsPhoneNumber(str7)}");

        string str8 = "hello[#world%";
        Debug.Log($"str8:{str8}");
        Debug.Log($"str8去除特殊字符:{StringHelper.ReplaceSpecialChars(str8)}");

        string str9 = "a.b*c";
        Debug.Log($"str9:{str9}");
        Debug.Log($"str9转义后特殊字符:{StringHelper.EscapeSpecialChars(str9)}");

        //数据脱敏与加密
        Debug.Log($"str7脱敏:{StringHelper.MaskPhone(str7)}");

        string str10 = "张三";
        Debug.Log($"str10:{str10}");
        Debug.Log($"str10脱敏:{StringHelper.MaskName(str10)}");

        //大小写转换
        Debug.Log($"str6转大写:{StringHelper.ToTitleCase(str6)}");

        string str11 = "Hello world";
        Debug.Log($"str11:{str11}");
        Debug.Log($"str11转小写:{StringHelper.FirstCharToLower(str11)}");

        Debug.Log($"str6每个单次首字符转大写:{StringHelper.ToTitleCase(str6)}");

        Debug.Log(StringHelper.AddColor(str1,Color.red));
        Debug.Log(StringHelper.AddBold(str1));
        Debug.Log(StringHelper.AddItalic(str1));
    }
}

好了,本次的分享到这里就结束啦,希望对你有所帮助~

相关推荐
加号35 小时前
【C#】获取电脑网卡MAC地址
windows·c#
sali-tec5 小时前
C# 基于halcon的视觉工作流-章49-网面破损
开发语言·图像处理·算法·计算机视觉·c#
YuanlongWang5 小时前
c# ABP vNext 框架详解及其模块化开发思想介绍
开发语言·c#
张人玉6 小时前
WPF布局控件(界面骨架核心)
开发语言·c#·wpf·布局控件
闲人编程6 小时前
使用MLflow跟踪和管理你的机器学习实验
开发语言·人工智能·python·机器学习·ml·codecapsule
Kevin Wang7276 小时前
解除chrome中http无法录音问题,权限
前端·chrome
vipbic6 小时前
使用Cursor开发Strapi5插件bag-strapi-plugin
前端·ai编程·cursor
看兵马俑的程序员6 小时前
RAG实现-本地PDF内容加载和切片
开发语言·python·pdf
专注前端30年6 小时前
【JavaScript】reduce 方法的详解与实战
开发语言·前端·javascript