You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

260 lines
7.0 KiB

3 years ago
using Microsoft.VisualBasic;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
namespace EC.Utils
{
/// <summary>
/// 字符串操作 - 工具方法
/// </summary>
public sealed partial class Str
{
#region Empty(空字符串)
/// <summary>
/// 空字符串
/// </summary>
public static string Empty
{
get { return string.Empty; }
}
#endregion Empty(空字符串)
#region PinYin(获取汉字的拼音简码)
/// <summary>
/// 使用字符编码方式获取拼音简码
/// </summary>
private static string ResolvePinYinByCode(ushort unicode)
{
if (unicode >= '\uB0A1' && unicode <= '\uB0C4')
return "A";
if (unicode >= '\uB0C5' && unicode <= '\uB2C0' && unicode != 45464)
return "B";
if (unicode >= '\uB2C1' && unicode <= '\uB4ED')
return "C";
if (unicode >= '\uB4EE' && unicode <= '\uB6E9')
return "D";
if (unicode >= '\uB6EA' && unicode <= '\uB7A1')
return "E";
if (unicode >= '\uB7A2' && unicode <= '\uB8C0')
return "F";
if (unicode >= '\uB8C1' && unicode <= '\uB9FD')
return "G";
if (unicode >= '\uB9FE' && unicode <= '\uBBF6')
return "H";
if (unicode >= '\uBBF7' && unicode <= '\uBFA5')
return "J";
if (unicode >= '\uBFA6' && unicode <= '\uC0AB')
return "K";
if (unicode >= '\uC0AC' && unicode <= '\uC2E7')
return "L";
if (unicode >= '\uC2E8' && unicode <= '\uC4C2')
return "M";
if (unicode >= '\uC4C3' && unicode <= '\uC5B5')
return "N";
if (unicode >= '\uC5B6' && unicode <= '\uC5BD')
return "O";
if (unicode >= '\uC5BE' && unicode <= '\uC6D9')
return "P";
if (unicode >= '\uC6DA' && unicode <= '\uC8BA')
return "Q";
if (unicode >= '\uC8BB' && unicode <= '\uC8F5')
return "R";
if (unicode >= '\uC8F6' && unicode <= '\uCBF9')
return "S";
if (unicode >= '\uCBFA' && unicode <= '\uCDD9')
return "T";
if (unicode >= '\uCDDA' && unicode <= '\uCEF3')
return "W";
if (unicode >= '\uCEF4' && unicode <= '\uD188')
return "X";
if (unicode >= '\uD1B9' && unicode <= '\uD4D0')
return "Y";
if (unicode >= '\uD4D1' && unicode <= '\uD7F9')
return "Z";
return string.Empty;
}
#endregion PinYin(获取汉字的拼音简码)
#region Splice(拼接集合元素)
/// <summary>
/// 拼接集合元素
/// </summary>
/// <typeparam name="T">集合元素类型</typeparam>
/// <param name="list">集合</param>
/// <param name="quotes">引号,默认不带引号,范例:单引号 "'"</param>
/// <param name="separator">分隔符,默认使用逗号分隔</param>
public static string Splice<T>(IEnumerable<T> list, string quotes = "", string separator = ",")
{
if (list == null)
return string.Empty;
var result = new StringBuilder();
foreach (var each in list)
result.AppendFormat("{0}{1}{0}{2}", quotes, each, separator);
return result.ToString().TrimEnd(separator.ToCharArray());
}
#endregion Splice(拼接集合元素)
#region FirstUpper(将值的首字母大写)
/// <summary>
/// 将值的首字母大写
/// </summary>
/// <param name="value">值</param>
public static string FirstUpper(string value)
{
string firstChar = value.Substring(0, 1).ToUpper();
return firstChar + value.Substring(1, value.Length - 1);
}
#endregion FirstUpper(将值的首字母大写)
#region ToCamel(将字符串转成驼峰形式)
/// <summary>
/// 将字符串转成驼峰形式
/// </summary>
/// <param name="value">原始字符串</param>
public static string ToCamel(string value)
{
return FirstUpper(value.ToLower());
}
#endregion ToCamel(将字符串转成驼峰形式)
#region ContainsChinese(是否包含中文)
/// <summary>
/// 是否包含中文
/// </summary>
/// <param name="text">文本</param>
public static bool ContainsChinese(string text)
{
const string pattern = "[\u4e00-\u9fa5]+";
return Regex.IsMatch(text, pattern);
}
#endregion ContainsChinese(是否包含中文)
#region ContainsNumber(是否包含数字)
/// <summary>
/// 是否包含数字
/// </summary>
/// <param name="text">文本</param>
public static bool ContainsNumber(string text)
{
const string pattern = "[0-9]+";
return Regex.IsMatch(text, pattern);
}
#endregion ContainsNumber(是否包含数字)
#region Distinct(去除重复)
/// <summary>
/// 去除重复
/// </summary>
/// <param name="value">值,范例1:"5555",返回"5",范例2:"4545",返回"45"</param>
public static string Distinct(string value)
{
var array = value.ToCharArray();
return new string(array.Distinct().ToArray());
}
#endregion Distinct(去除重复)
#region Truncate(截断字符串)
/// <summary>
/// 截断字符串
/// </summary>
/// <param name="text">文本</param>
/// <param name="length">返回长度</param>
/// <param name="endCharCount">添加结束符号的个数,默认0,不添加</param>
/// <param name="endChar">结束符号,默认为省略号</param>
public static string Truncate(string text, int length, int endCharCount = 0, string endChar = ".")
{
if (string.IsNullOrWhiteSpace(text))
return string.Empty;
if (text.Length < length)
return text;
return text.Substring(0, length) + GetEndString(endCharCount, endChar);
}
/// <summary>
/// 获取结束字符串
/// </summary>
private static string GetEndString(int endCharCount, string endChar)
{
StringBuilder result = new StringBuilder();
for (int i = 0; i < endCharCount; i++)
result.Append(endChar);
return result.ToString();
}
#endregion Truncate(截断字符串)
#region ToSimplifiedChinese(转换为简体中文)
/// <summary>
/// 转换为简体中文
/// </summary>
/// <param name="text">繁体中文</param>
public static string ToSimplifiedChinese(string text)
{
return Strings.StrConv(text, VbStrConv.SimplifiedChinese);
}
#endregion ToSimplifiedChinese(转换为简体中文)
#region ToSimplifiedChinese(转换为繁体中文)
/// <summary>
/// 转换为繁体中文
/// </summary>
/// <param name="text">简体中文</param>
public static string ToTraditionalChinese(string text)
{
return Strings.StrConv(text, VbStrConv.TraditionalChinese);
}
#endregion ToSimplifiedChinese(转换为繁体中文)
#region Unique(获取全局唯一值)
/// <summary>
/// 获取全局唯一值
/// </summary>
public static string Unique()
{
return Guid.NewGuid().ToString().Replace("-", "");
}
#endregion Unique(获取全局唯一值)
#region GetLastProperty(获取最后一个属性)
/// <summary>
/// 获取最后一个属性
/// </summary>
/// <param name="propertyName">属性名,范例,A.B.C,返回"C"</param>
public static string GetLastProperty(string propertyName)
{
if (string.IsNullOrEmpty(propertyName))
return string.Empty;
var lastIndex = propertyName.LastIndexOf(".", StringComparison.Ordinal) + 1;
return propertyName.Substring(lastIndex);
}
#endregion GetLastProperty(获取最后一个属性)
}
}