字符串操作在任意编程语言的日常编程中都随处可见, 今天来汇总一下 C# 中关于字符串的一些你可能遗忘或遗漏的知识点.
逐字字符串
在普通字符串中, 反斜杠字符是转义字符. 而在逐字字符串 (Verbatim Strings) 中, 字符将被编程器按照原义进行解释. 使用逐字字符串只需在字符串前面加上 @ 符号.
- // 逐字字符串: 转义符
- var filename = @"c:\temp\newfile.txt";
- Console.WriteLine(filenaame);
- // 逐字字符串: 多行文本
- var multiLine = @"This is a
- multiline paragraph.";
- Console.WriteLine(multiLine);
- // 非逐字字符串
- var escapedFilename = "c:\temp\newfile.txt";
- Console.WriteLine(escapedFilename);
输出:
- c:\temp\newfile.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 \n 1 2 {5 - 2}");
- // 输出: Testing \n 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
来源: https://www.cnblogs.com/willick/p/13035697.html