美文网首页
C# 字符串操作知识点汇总

C# 字符串操作知识点汇总

作者: wwmin_ | 来源:发表于2020-06-11 11:41 被阅读0次

String.Format 方法的几种定义:

String.Format (String, Object) 将指定的 String 中的格式项替换为指定的 Object 实例的值的文本等效项。
String.Format (String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。
String.Format (IFormatProvider, String, Object[]) 将指定 String 中的格式项替换为指定数组中相应 Object 实例的值的文本等效项。指定的参数提供区域性特定的格式设置信息。
String.Format (String, Object, Object) 将指定的 String 中的格式项替换为两个指定的 Object 实例的值的文本等效项。
String.Format (String, Object, Object, Object) 将指定的 String 中的格式项替换为三个指定的 Object 实例的值的文本等效项。

/// <summary>
/// 字符串操作知识点汇总
/// </summary>
public class CommonStringTools
{
    public void RunTest()
    {
        //逐字字符串:转义符
        var fileName = @"c:\temp\newfile.txt";
        Console.WriteLine(fileName);

        //逐字字符串:多行文本
        var multiLine = @"This is a
multiline paragraph.";
        Console.WriteLine(multiLine);

        // 非逐字字符串
        var escapedFileName = "c:\temp\newfile.txt";
        Console.WriteLine(escapedFileName);

        //逐字字符串中唯一不被原样解释的字符是双引号。由于双引号是定义字符串的关键字,所以在逐字字符串中要表达双引号需要双引号进行转移。
        var str = @"""I don't think so"",he said.";
        Console.WriteLine(str);

        //在逐字字符串中也可以 $ 符号实现字符串内插值
        Console.WriteLine($@"Testing \n 1 2 {5 - 2}");

        //数字格式化方法为:
        //string.Format("{index[:format]}", number);
        //“#”描述:占位符,如果可能,填充位
        Console.WriteLine(string.Format("{0:######}", 1234));//=>1234
        Console.WriteLine(string.Format("{0:000000}", 1234));//=>001234
        Console.WriteLine(string.Format("{0:#0####}", 1234));//=>01234
        Console.WriteLine(string.Format("{0:0#0####}", 1234));//=>0001234

        //“."描述:小数点
        Console.WriteLine(string.Format("{0:000.000}", 1234));//=>1234.000
        Console.WriteLine(string.Format("{0:000.000}", 4321.12543));//=>4321.125

        //“,”描述:千分表示
        Console.WriteLine(string.Format("{0:0,0}", 1234567));//=>1,234,567

        //“%”描述:格式化为百分数
        Console.WriteLine(string.Format("{0:0%}", 1234));//=>123400%;
        Console.WriteLine(string.Format("{0:#%}", 1234.125));//=>123413%
        Console.WriteLine(string.Format("{0:0.00%}", 1234));//=>123400.00%
        Console.WriteLine(string.Format("{0:#.00%}", 1234.125));//=>123412.50%

        //内置快捷字母格式化用法
        //E-科学计数法表示
        Console.WriteLine((25000).ToString("E"));//=>2.500000E+004

        //C-货币表示,带有逗号分隔符,默认小数点后保留两位,四舍五入
        Console.WriteLine((2.5).ToString("C"));//=>¥2.50

        //D[length]-十进制数
        Console.WriteLine((25).ToString("D5"));//=>00025

        // F[precision]-浮点数,保留小数位数(四舍五入)
        Console.WriteLine((25).ToString("F2"));//=>2.52

        // G[digits]-常规,保留指定位数的有效数字,四舍五入
        Console.WriteLine((2.52).ToString("G2"));//=>2.5

        // N- 带有逗号分隔符,默认小数点后保留两位,四舍五入
        Console.WriteLine((2500000).ToString("N"));//=>2,500,000.00

        // X- 十六进制,非整形将产生格式异常
        Console.WriteLine((255).ToString("X"));//=>FF

        //ToString也可以自定义补零格式化
        Console.WriteLine((15).ToString("000"));//=>015
        Console.WriteLine((15).ToString("value is 0"));//=> value is 15
        Console.WriteLine((10.456).ToString("0.00"));//=>10.46
        Console.WriteLine((10.456).ToString("00"));//=>10
        Console.WriteLine((10.456).ToString("value si 0.0"));//=>10.5

        //转化为二进制、八进制、十六进制输出
        int number = 15;
        Console.WriteLine(Convert.ToString(number, 2));//=>1111
        Console.WriteLine(Convert.ToString(number, 8));//=>17
        Console.WriteLine(Convert.ToString(number, 16));//=>f

        //使用自定义格式化器
        var s = string.Format(new CustomFormat(), "-> {0:Reverse} <-", "Hello World");
        Console.WriteLine(s);//=> -> dlroW olleH <-

        //字符串拼接
        //将数组中的字符串拼接成一个字符串
        var parts = new[] { "Foo", "Bar", "Fizz", "Buzz" };
        var joined = string.Join(", ", parts);
        Console.WriteLine(joined);//=>Foo, Bar, Fizz, Buzz

        //以下四种方式都可以达到相同的字符串拼接的目的
        string first = "Hello";
        string second = "World";
        Console.WriteLine(first + " " + second);//=>Hello World
        Console.WriteLine(string.Concat(first, " ", second));//=>Hello World
        Console.WriteLine(string.Format("{0} {1}", first, second));//=>Hello World
        Console.WriteLine($"{first} {second}");//=>Hello World

        //字符串内插法
        var name = "World";
        Console.WriteLine($"Hello,{name}");//Hello,World

        //带有日期格式化
        var date = DateTime.Now;
        Console.WriteLine($"Today is {date:yyyy-MM-dd}");

        //补齐格式化 (padding)
        var num = 42;
        //向左补齐
        Console.WriteLine($"The num is {num,5}.");//=>The num is    42.
                                                    //向右补齐
        Console.WriteLine($"The num is {num,-5}.");//=>The num is 42   .

        //组合内置快捷字母格式化
        var amount = 2.5;
        Console.WriteLine($"It costs {amount:C}");//=>It costs ¥2.50
        Console.WriteLine($"The num is {num,5:f1}.");//=>The num is  42.0.
    }
}

//自定义格式化器
public class CustomFormat : IFormatProvider, ICustomFormatter
{
    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (!this.Equals(formatProvider))
        {
            return null;
        }
        if (format == "Reverse")
        {
            return string.Join("", arg.ToString().Reverse());
        }
        return arg.ToString();
    }
    public object GetFormat(Type formatType)
    {
        return formatType == typeof(ICustomFormatter) ? this : null;
    }
}

常用的几种实例
1、字符串的数字格式

 string str1 =string.Format("{0:N1}",56789);               //result: 56,789.0
 string str2 =string.Format("{0:N2}",56789);               //result: 56,789.00
 string str3 =string.Format("{0:N3}",56789);               //result: 56,789.000
 string str8 =string.Format("{0:F1}",56789);               //result: 56789.0
 string str9 =string.Format("{0:F2}",56789);               //result: 56789.00
 string str11 =(56789 / 100.0).ToString("#.##");           //result: 567.89
 string str12 =(56789 / 100).ToString("#.##");             //result: 567
 string str = string.Format("{0:f2}", .2);                   //result: 0.20

2、格式化货币(跟系统的环境有关,中文系统默认格式化人民币,英文系统格式化美元)
代码如下:
string.Format("{0:C}",0.2)
结果为:¥0.20 (英文操作系统结果:$0.20
默认格式化小数点后面保留两位小数,如果需要保留一位或者更多,可以指定位数

代码如下:
string.Format("{0:C1}",23.15)
结果为:¥23.2 (截取会自动四舍五入)
格式化多个Object实例

代码如下:
string.Format("市场价:{0:C},优惠价{1:C}",23.15,19.82)

3、格式化十进制的数字(格式化成固定的位数,位数不能少于未格式化前,只支持整形)

string.Format("{0:D3}",23) //结果为:023
string.Format("{0:D2}",1223) //结果为:1223,(精度说明符指示结果字符串中所需的最少数字个数。)

4、用分号隔开的数字,并指定小数点后的位数

string.Format("{0:N}", 14200) //结果为:14,200.00 (默认为小数点后面两位)
string.Format("{0:N3}", 14200.2458) //结果为:14,200.246 (自动四舍五入)

5、格式化百分比

string.Format("{0:P}", 0.24583) //结果为:24.58% (默认保留百分的两位小数)
string.Format("{0:P1}", 0.24583) //结果为:24.6% (自动四舍五入)

6、零占位符和数字占位符

string.Format("{0:0000.00}", 12394.039) //结果为:12394.04
string.Format("{0:0000.00}", 194.039) //结果为:0194.04
string.Format("{0:###.##}", 12394.039) //结果为:12394.04
string.Format("{0:####.#}", 194.039) //结果为:194

7、日期格式化

string.Format("{0:d}",System.DateTime.Now) //结果为:2009-3-20 (月份位置不是03)
string.Format("{0:D}",System.DateTime.Now) //结果为:2009年3月20日
string.Format("{0:f}",System.DateTime.Now) //结果为:2009年3月20日 15:37
string.Format("{0:F}",System.DateTime.Now) //结果为:2009年3月20日 15:37:52
string.Format("{0:g}",System.DateTime.Now) //结果为:2009-3-20 15:38
string.Format("{0:G}",System.DateTime.Now) //结果为:2009-3-20 15:39:27
string.Format("{0:m}",System.DateTime.Now) //结果为:3月20日
string.Format("{0:t}",System.DateTime.Now) //结果为:15:41
string.Format("{0:T}",System.DateTime.Now) //结果为:15:41:50

更详细的说明请下面微软对此的说明或者上msdn上查询。

相关文章

网友评论

      本文标题:C# 字符串操作知识点汇总

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