C# 字符串(String)总结

字符串在C#中是特殊的存在,它是引用类型(内存分配中以享元模式存储在托管堆上),属于不可改变的对象。任何对字符串的修改都会返回1个新的字符串。

在字符串前加 @ 符号,不会对转义字符进行处理,例如:string str1 = @"C:\Windows\System32";
在字符串前加 $ 符号,可占位插入变量,例如:string str2 = $"{str1}";
在字符串中计算加减乘除,例如:new System.Data.DataTable().Compute("100*10/5+5-1", null).ToString();//结果:204";

【字符串常用截取】:
string str="123456789";//方便观察测试的结果

//1、取字符串的前i个字符:【str.Substring(0,i)】或【str.Remove(i,str.Length-i)】

str.Substring(0,5);//结果:12345
str.Remove(5,str.Length-5);//结果:12345

//2、去掉字符串前i个字符:【str.Remove(0,i)】或【str.SubString(i)】

str.Remove(0,3);//结果:456789
str.SubString(3);//结果:456789

//3、从右边开始取i个字符:【str.Remove(0,str.Length-i)】或【str.SubString(str.Length-i)】

str.Remove(0,str.Length-2);//结果:89
str.SubString(str.Length-2);//结果:89

//4、从右边开始去掉i个字符:【str.Remove(str.Length-i,i)】或【str.Substring(0,str.Length-i)】

str.Remove(str.Length-3,3);//结果:123456
str.Substring(0,str.Length-3);//结果:123456

【时间.ToString() 格式化小结】:

DateTime.Now.ToString();//结果:2024/6/15 0:00:00
DateTime.Now.ToString("yyyy/MM/dd");//结果:2024/6/15
DateTime.Now.ToString("yyyy-MM-dd");//结果:2024-06-15
DateTime.Now.ToString("yyyy.MM.dd");//结果:2024.06.15
DateTime.Now.ToString("dd/MM/yyyy");//结果:15/06/2024
DateTime.Now.ToString("dd-MM-yyyy");//结果:15-06-2024
DateTime.Now.ToString("yyyy年MM月dd日");//结果:2024年06月15日
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ms"));//结果:2024-06-15 08:02:03:234
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));//结果:2024-06-15 08:02:03.2341[ffff越多精度越高]

【数字.ToString() 格式化小结】:
//D -> 数字位数不足N个自动前面补0
1.ToString("D3");//结果:001
1.ToString("D8");//结果:00000001

//F -> 保留小数点后N位(会自动四舍五入)
3.1415927.ToString("F0");//结果:3
3.1415927.ToString("F4");//结果:3.1416

//P -> 转化成百分比%,保留小数点后N位
0.5346.ToString("P0");//结果:53%
0.5346.ToString("P2");//结果:53.46%

//C -> 货币
2.5.ToString("C");//结果:¥2.50

//X -> 转化为16进制(区分大小写),X加数字N表示位数不足N位前面自动补0
255.ToString("x");//结果:ff
255.ToString("X");//结果:FF
255.ToString("X5");//结果:000FF

//N -> 千分符
string b = "";
//C#中用最简单的方法把数字(不含小数)转换为千分位格式
b = 1234567.ToString("###,###");//结果:1,234,567
b = 1234567.ToString("N0");//结果:1,234,567

//C#中把数字转换成带两位小数的千分位字符(其中N2是保留2位小数,N3则是保留三位小数,保留小数会四舍五入)
b = String.Format("{0:N}", 1234567.891); //结果:1,234,567.89
b = String.Format("{0:N}", 1234567);     //结果:1,234,567.00   默认为两位小数,如果没有小数位,则小数位补两个0
b = String.Format("{0:N2}", 1234567.896);//结果:1,234,567.90

用正则表达式隐藏部分数字
/// <summary>  
/// 隐藏部分数字(替换连续数字中间N位为* ) 
/// </summary>  
/// <param name="numStr">连续数字[电话、QQ等]</param>  
/// <returns>隐藏了部分数字的结果</returns>  
public string HidePartNumStr(string numStr)
{
    Regex re = new Regex(@"(\d{3})(\d{4})(\d{4})", RegexOptions.None); //先将连续数字拆分3个部分,占位为$1,$2,$3
    return re.Replace(numStr, "$1****$3");//保留$1部分和$3部分,用"****"替换中间部分
}

判断字符串是否包含Emoji表情
/// <summary>
/// 判断String中是否包含Emoji
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public static bool ContainsEmoji(string str)
{
    int len = str.Length;
    foreach (char item in str)
    {
        if (!IsEmojiCharacter(item)) return true;//如果不能匹配,则该字符是Emoji表情
    }
    return false;
}

/// <summary>
///根据char判断是否是Emoji
/// </summary>
/// <param name="codePoint"></param>
/// <returns></returns>
private static bool IsEmojiCharacter(char codePoint)
{
    return (codePoint == 0x0) || (codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)
                     || ((codePoint >= 0x20) && (codePoint <= 0xD7FF))
                     || ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))
                     || ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF));
}
posted @ 2024-06-14 22:33  天空科技  阅读(44)  评论(0编辑  收藏  举报