zoukankan      html  css  js  c++  java
  • [C#.NET 拾遗补漏]01:字符串操作

    字符串操作在任意编程语言的日常编程中都随处可见,今天来汇总一下 C# 中关于字符串的一些你可能遗忘或遗漏的知识点。

    逐字字符串

    在普通字符串中,反斜杠字符是转义字符。而在逐字字符串(Verbatim Strings)中,字符将被编程器按照原义进行解释。使用逐字字符串只需在字符串前面加上 @ 符号。

    // 逐字字符串:转义符
    var filename = @"c: emp ewfile.txt";
    Console.WriteLine(filenaame);

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

    // 非逐字字符串
    var escapedFilename = "c: emp ewfile.txt";
    Console.WriteLine(escapedFilename);

    输出:

    c:	emp
    ewfile.txt
    This is a
    multiline paragraph.
    c: emp
    ewfile.txt

    逐字字符串中唯一不被原样解释的字符是双引号。由于双引号是定义字符串的关键字符,所以在逐字字符串中要表达双引号需要用双引号进行转义。

    varstr = @"""I don't think so"", he said.";
    Console.WriteLine(str);
    // 输出:"I don't think so", he said.

    在逐字字符串中也可以 $ 符号实现字符串内插值。

    Console.WriteLine($@"Testing 
     1 2 {5 - 2}");
    // 输出:Testing 1 2 3

    数字格式化转换

    典型的的格式化方法为:

    string.Format("{index[:format]}", number)

    可使用“0”和“#”占位符进行补位。“0” 表示位数不够位数就补充“0”,小数部分如果位数多了则会四舍五入;“#”表示占位,用于辅助“0”进行补位。

    标准格式化用法:

    // “0”描述:占位符,如果可能,填充位
    string.Format("{0:000000}",1234); // 结果:001234

    // “#”描述:占位符,如果可能,填充位
    string.Format("{0:######}",1234); // 结果:1234
    string.Format("{0:#0####}",1234); // 结果:01234
    string.Format("{0:0#0####}",1234); // 结果:0001234

    // "."描述:小数点
    string.Format("{0:000.000}", 1234); // 结果:1234.000
    string.Format("{0:000.000}", 4321.12543); // 结果:4321.125

    // ","描述:千分表示
    string.Format("{0:0,0}", 1234567); //结果:1,234,567

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

    内置快捷字母格式化用法:

    // E-科学计数法表示
    (25000).ToString("E"); // 结果:2.500000E+004

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

    // D[length]-十进制数
    (25).ToString("D5"); // 结果:00025

    // F[precision]-浮点数,保留小数位数(四舍五入)
    (25).ToString("F2"); // 结果:25.00

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

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

    // X-十六进制,非整型将产生格式异常
    (255).ToString("X"); // 结果:FF

    ToString 也可以自定义补零格式化:

    (15).ToString("000");              // 结果:015
    (15).ToString("value is 0"); // 结果:value is 15
    (10.456).ToString("0.00"); // 结果:10.46
    (10.456).ToString("00"); // 结果:10
    (10.456).ToString("value is 0.0"); // 结果:value is 10.5

    转换为二进制、八进制、十六进制输出:

    int number = 15;
    Convert.ToString(number, 2); // 结果:1111
    Convert.ToString(number, 8); // 结果:17
    Convert.ToString(number, 16); // 结果:f

    自定义格式化器:

    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;
    }
    }

    使用自定义格式化器:

    String.Format(newCustomFormat(), "-> {0:Reverse} <-", "Hello World");
    // 输出:-> dlroW olleH <-

    字符串拼接

    将数组中的字符串拼接成一个字符串:

    var parts = new[] { "Foo", "Bar", "Fizz", "Buzz"};
    var joined = string.Join(", ", parts);
    // joined = "Foo, Bar, Fizz, Buzz"

    以下四种方式都可以达到相同的字符串拼接的目的:

    string first = "Hello";
    string second = "World";
    string foo = first + " " + second;
    string foo = string.Concat(first, " ", second);
    string foo = string.Format("{0} {1}", firstname, lastname);
    string foo = $"{firstname} {lastname}";

    字符串内插法

    简单用法:

    var name = "World";
    var str =$"Hello, {name}!";
    // str = "Hello, World!"

    带日期格式化:

    var date = DateTime.Now;
    var str = $"Today is {date:yyyy-MM-dd}!";

    补齐格式化(Padding):

    var number = 42;

    // 向左补齐
    var str = $"The answer to life, the universe and everything is {number, 5}.";
    // str = "The answer to life, the universe and everything is ___42." ('_'表示空格)

    // 向右补齐
    var str = $"The answer to life, the universe and everything is ${number, -5}.";
    // str = "The answer to life, the universe and everything is 42___."

    结合内置快捷字母格式化:

    var amount = 2.5;
    var str = $"It costs {amount:C}";
    // str = "¥2.50"

    var number = 42;
    var str = $"The answer to life, the universe and everything is {number, 5:f1}.";
    // str = "The answer to life, the universe and everything is ___42.1"

    参考:

    1.《C# 7.0 in a Nutshell》

    2. https://bit.ly/2U1eIK9

  • 相关阅读:
    A Simple Problem with Integers poj 3468 多树状数组解决区间修改问题。
    Fliptile 开关问题 poj 3279
    Face The Right Way 一道不错的尺取法和标记法题目。 poj 3276
    Aggressive cows 二分不仅仅是查找
    Cable master(二分题 注意精度)
    B. Pasha and String
    Intervals poj 1201 差分约束系统
    UITextField的快速基本使用代码块
    将UIImage转换成圆形图片image
    color转成image对象
  • 原文地址:https://www.cnblogs.com/willick/p/13035697.html
Copyright © 2011-2022 走看看