C# 字符串格式化
上次修改时间:2024 年 1 月 17 日
C# 字符串格式化教程展示了如何在 C# 中格式化字符串。我们使用 string.Format、Console.WriteLine 和 StringBuilder.AppendFormat 来格式化字符串。
创建字符串的另一种方法是使用 字符串插值。
复合格式化 允许我们在 C# 中格式化字符串。诸如 string.Format、Console.WriteLine 或 StringBuilder.AppendFormat 等方法支持它。 一个方法接收一个对象列表和一个复合格式字符串作为输入。 格式字符串由固定字符串和一些格式项组成。 这些格式项是索引占位符,它们对应于列表中的对象。
格式项具有以下语法
{index[,alignment][:formatString]}
index 组件是必需的。 它是一个从 0 开始的数字,它引用对象列表中的一个项目。 多个项目可以引用对象列表的同一元素。 如果一个对象未被格式项引用,则会被忽略。 如果我们引用对象列表的范围之外,则会抛出运行时异常。
alignment 组件是可选的。 它是参数的字符串表示形式中的最小字符数。 如果为正数,则参数右对齐;如果为负数,则参数左对齐。 如果指定了对齐方式,则必须使用冒号分隔索引和长度。
formatString 是可选的。 它是一个以特定方式格式化值的字符串。 它可以用于格式化日期、时间、数字或枚举。
C# 字符串格式化方法
在以下示例中,我们使用 string.Format、Console.WriteLine 和 StringBuilder.AppendFormat 来格式化字符串。
using System.Text;
var msg = string.Format("There are {0} owls", 5);
Console.WriteLine(msg);
Console.WriteLine("There are {0} eagles", 3);
var builder = new StringBuilder();
builder.AppendFormat("There are {0} hawks", 4);
Console.WriteLine(builder);
该示例使用三种不同的方法格式化字符串。
$ dotnet run There are 5 owls There are 3 eagles There are 4 hawks
C# 字符串格式化索引
在以下示例中,我们格式化三个字符串。
int oranges = 2;
int apples = 4;
int bananas = 3;
string str1 = "There are {0} oranges, {1} apples and {2} bananas";
string str2 = "There are {1} oranges, {2} bananas and {0} apples";
Console.WriteLine(str1, oranges, apples, bananas);
Console.WriteLine(str2, apples, oranges, bananas);
我们将一条简单的消息打印到控制台。 我们仅使用格式项的 index 组件。
string str1 = "There are {0} oranges, {1} apples and {2} bananas";
{0}、{1} 和 {2} 是格式项。 我们指定索引组件。 其他组件是可选的。
Console.WriteLine(str1, oranges, apples, bananas);
现在我们将复合格式放在一起。 我们有字符串和对象列表(橙子、苹果、香蕉)。 {0} 格式项引用橙子。 WriteLine 方法将 {0} 格式项替换为 oranges 变量的内容。
string str2 = "There are {1} oranges, {2} bananas and {0} apples";
格式项引用对象的顺序很重要。
$ dotnet run There are 2 oranges, 4 apples and 3 bananas There are 2 oranges, 3 bananas and 4 apples
C# 字符串格式化数字数据
下一个例子将格式化数字数据。
Console.WriteLine("{0} {1, 12}", "Decimal", "Hexadecimal");
Console.WriteLine("{0:D} {1,8:X}", 502, 546);
Console.WriteLine("{0:D} {1,8:X}", 345, 765);
Console.WriteLine("{0:D} {1,8:X}", 320, 654);
Console.WriteLine("{0:D} {1,8:X}", 120, 834);
Console.WriteLine("{0:D} {1,8:X}", 620, 454);
我们以十进制和十六进制格式打印数字。 我们还使用 length 组件对齐数字。
Console.WriteLine("{0:D} {1,8:X}", 502, 546);
{0:D} 格式项指定,将采用所提供对象列表中的第一个项目并以十进制格式进行格式化。 {1,8:X} 格式项采用第二个项目。 以十六进制格式 :X 格式化它。 并且字符串长度将为 8 个字符 8 。 因为该数字只有三个字符,所以它右对齐并填充空字符串。
$ dotnet run Decimal Hexadecimal 502 222 345 2FD 320 28E 120 342 620 1C6
以下示例显示了如何使用各种数字表示法。
Console.WriteLine("Number: {0:N}", 127);
Console.WriteLine("Scientific: {0:E}", 127);
Console.WriteLine("Currency: {0:C}", 127);
Console.WriteLine("Percent: {0:P}", 127);
Console.WriteLine("Hexadecimal: {0:X}", 127);
该示例演示了数字的标准格式说明符。 数字 126 以五种不同的表示法打印:普通、科学、货币、百分比和十六进制。
$ dotnet run Number: 127.00 Scientific: 1.270000E+002 Currency: $127.00 Percent: 12,700.00% Hexadecimal: 7F
逗号和点说明符
点 (.) 自定义格式说明符将本地化的十进制分隔符插入到结果字符串中。 逗号 (,) 说明符插入组分隔符。
using System.Globalization;
double val = 127723134.212578;
var f1 = string.Format(CultureInfo.InvariantCulture, "{0:#,#.##}", val);
var f2 = string.Format(CultureInfo.InvariantCulture, "{0:0.0000}", val);
Console.WriteLine(val);
Console.WriteLine(f1);
Console.WriteLine(f2);
我们使用这两个说明符格式化一个 double 值。
var f1 = string.Format(CultureInfo.InvariantCulture, "{0:#,#.##}", val);
此格式将使用本地化的组分隔符,并在小数点后显示两位数字。
var f2 = string.Format(CultureInfo.InvariantCulture, "{0:0.0000}", val);
在这种格式中,我们显示四个小数点,并且没有组分隔符。
$ dotnet run 127723134,212578 127,723,134.21 127723134.2126
C# 字符串格式化对齐
alignment(或长度)字段是要写入输出的最小字符数。 如果我们使用 {0,10},则输出右对齐。 对于左对齐,我们指定一个负长度字段:{0,-10}。
Console.WriteLine(1);
Console.WriteLine(16);
Console.WriteLine(1655);
Console.WriteLine(16567);
Console.WriteLine(166701);
Console.WriteLine("{0,10}", 1);
Console.WriteLine("{0,10}", 16);
Console.WriteLine("{0,10}", 1655);
Console.WriteLine("{0,10}", 16567);
Console.WriteLine("{0,10}", 166701);
首先,我们打印五个数字,而不指定字段长度。 输出的长度等于显示的字符数。 在第二种情况下,我们的字段长度为 10。五个输出中的每一个的最小长度为十个字符。 数字右对齐。
$ dotnet run
1
16
1655
16567
166701
1
16
1655
16567
166701
C# 字符串格式化日期和时间
下一个示例格式化日期和时间数据。
var now = DateTime.Now;
Console.WriteLine("Short date: {0:d}", now);
Console.WriteLine("Long date: {0:D}", now);
Console.WriteLine("Short time: {0:t}", now);
Console.WriteLine("Long time: {0:T}", now);
Console.WriteLine("Month: {0:M}", now);
Console.WriteLine("Year: {0:Y}", now);
代码示例显示了当前日期和时间的六种不同格式。
$ dotnet run Short date: 1/17/2024 Long date: Wednesday, January 17, 2024 Short time: 09:55 Long time: 09:55:43 Month: January 17 Year: January 2024
来源
在本文中,我们已经用 C# 格式化了字符串。
作者
列出所有 C# 教程。