ZetCode

C# 字符串格式化

上次修改时间:2024 年 1 月 17 日

C# 字符串格式化教程展示了如何在 C# 中格式化字符串。我们使用 string.FormatConsole.WriteLineStringBuilder.AppendFormat 来格式化字符串。

创建字符串的另一种方法是使用 字符串插值

复合格式化 允许我们在 C# 中格式化字符串。诸如 string.FormatConsole.WriteLineStringBuilder.AppendFormat 等方法支持它。 一个方法接收一个对象列表和一个复合格式字符串作为输入。 格式字符串由固定字符串和一些格式项组成。 这些格式项是索引占位符,它们对应于列表中的对象。

格式项具有以下语法

{index[,alignment][:formatString]}

index 组件是必需的。 它是一个从 0 开始的数字,它引用对象列表中的一个项目。 多个项目可以引用对象列表的同一元素。 如果一个对象未被格式项引用,则会被忽略。 如果我们引用对象列表的范围之外,则会抛出运行时异常。

alignment 组件是可选的。 它是参数的字符串表示形式中的最小字符数。 如果为正数,则参数右对齐;如果为负数,则参数左对齐。 如果指定了对齐方式,则必须使用冒号分隔索引和长度。

formatString 是可选的。 它是一个以特定方式格式化值的字符串。 它可以用于格式化日期、时间、数字或枚举。

C# 字符串格式化方法

在以下示例中,我们使用 string.FormatConsole.WriteLineStringBuilder.AppendFormat 来格式化字符串。

Program.cs
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# 字符串格式化索引

在以下示例中,我们格式化三个字符串。

Program.cs
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# 字符串格式化数字数据

下一个例子将格式化数字数据。

Program.cs
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

以下示例显示了如何使用各种数字表示法。

Program.cs
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

逗号和点说明符

点 (.) 自定义格式说明符将本地化的十进制分隔符插入到结果字符串中。 逗号 (,) 说明符插入组分隔符。

Program.cs
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}

Program.cs
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# 字符串格式化日期和时间

下一个示例格式化日期和时间数据。

Program.cs
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

来源

String.Format 方法

在本文中,我们已经用 C# 格式化了字符串。

作者

我的名字是 Jan Bodnar,我是一位充满热情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我已经撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 C# 教程