using System.Diagnostics.CodeAnalysis;
using System.Text;
using System.Text.RegularExpressions;
namespace System
{
///
/// 字符串扩展方法
///
public static class StringExtension
{
///
/// 判断字符串是否为 Null 或空字符串
///
/// 当前字符串
/// 如果字符串为 Null 或空字符串,则返回 true;否则返回 false.
public static bool IsNullOrEmpty(this string? @this) => string.IsNullOrEmpty(@this);
///
/// 判断字符串是否为 Null 或白字符串
///
/// 当前字符串
/// 如果字符串为 Null 或由空白字符组成,则返回 true;否则返回 false.
/// 例如" "此时返回True
public static bool IsNullOrWhiteSpace(this string? @this) => string.IsNullOrWhiteSpace(@this);
///
/// 判断字符串是否符合指定模式
///
/// 当前字符串
/// 要使用的模式.使用"*"作为通配符字符串.
/// 如果字符串符合指定模式,则返回true; 否则返回false
public static bool IsLike([NotNull] this string @this, string pattern)
{
// 将模式转换为正则表达式,并使用 ^$ 匹配整个字符串
var regexPattern = "^" + Regex.Escape(pattern) + "$";
// 转义特殊字符 ?、#、*、[] 和 [!]
regexPattern = regexPattern.Replace(@"\[!", "[^")
.Replace(@"\[", "[")
.Replace(@"\]", "]")
.Replace(@"\?", ".")
.Replace(@"\*", ".*")
.Replace(@"\#", @"\d");
// 判断字符串是否符合正则表达式规则
return Regex.IsMatch(@this, regexPattern);
}
///
/// 重复指定的字符串指定次数
///
/// 当前字符串
/// 重复次数
/// 重复指定次数后的字符串
public static string Repeat([NotNull] this string @this, int repeatCount)
{
if (@this.Length == 1)
{
return new string(@this[0], repeatCount);
}
var sb = new StringBuilder(repeatCount * @this.Length);
while (repeatCount-- > 0)
{
sb.Append(@this);
}
return sb.ToString();
}
///
/// 反转给定字符串
///
/// 当前字符串
/// 反转后的字符串
public static string Reverse([NotNull] this string @this)
{
if (@this.Length <= 1)
{
return @this;
}
var chars = @this.ToCharArray();
Array.Reverse(chars);
return new string(chars);
}
///
/// 返回使用指定编码的字符串所表示的字节数组
///
/// 要转换的字符串
/// 要使用的编码
/// 包含字符串中字符所表示的字节的数组
public static byte[] GetBytes([NotNull] this string str, Encoding encoding) => encoding.GetBytes(str);
///
/// 判断两个字符串是否相等,忽略大小写.
///
/// 字符串1
/// 字符串2
/// 如果两个字符串相等(忽略大小写),则返回 true;否则返回 false.
public static bool EqualsIgnoreCase(this string s1, string s2) => string.Equals(s1, s2, StringComparison.OrdinalIgnoreCase);
///
/// 将字符串转换为长整型数值.
///
/// 要转换的字符串
/// 如果转换成功,返回转换后的长整型数值;否则返回 null.
public static int? ToInt(this string @this)
{
bool status = int.TryParse(@this, out int result);
if (status)
return result;
else
return null;
}
///
/// 将字符串转换为长整型数值.
///
/// 要转换的字符串
/// 如果转换成功,返回转换后的长整型数值;否则返回 null.
public static long? ToLong(this string @this)
{
bool status = long.TryParse(@this, out long result);
if (status)
return result;
else
return null;
}
///
/// 驼峰转下划线命名
///
///
///
public static string ToUnderline(string humpString)
{
return Regex.Replace(humpString, "([A-Z])", "_$1").ToLower().TrimStart('_');
}
}
}