MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

C# string.format详解

2025-02-24 16:41 huorong 精选文章 3 ℃ 0 评论

C#中的string.format()方法是一个非常实用的字符串格式化工具,它可以将一个字符串中的占位符替换为指定的值,并返回一个格式化后的新字符串。下面是一些常用的用法及示例:

1.使用占位符 {}

string name = "Tom";
int age = 18;
string message = string.Format("My name is {0}, and I'm {1} years old.", name, age);
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.

在上面的例子中,{0}和{1}是占位符,分别代表后面传入的第一个和第二个参数,它们会按照顺序替换字符串中的占位符。

2. 指定格式化方式

除了使用占位符外,我们还可以在占位符后面添加格式化选项,以指定输出的格式。例如,我们可以指定数字的小数点位数,或者使用日期格式化字符串。

double pi = 3.1415926;
string message = string.Format("The value of pi is approximately {0:F2}.", pi);
Console.WriteLine(message);
// 输出:The value of pi is approximately 3.14.
DateTime now = DateTime.Now;
string message = string.Format("Today is {0:d}, and the time is {0:T}.", now);
Console.WriteLine(message);
// 输出:Today is 6/12/2021, and the time is 4:35:22 PM.

在上面的例子中,{0:F2}指定了将数值格式化为带有两位小数的浮点数,{0:d}和{0:T}分别指定了日期和时间的格式化方式。

3. 使用命名占位符 {name}

除了使用数字作为占位符,我们还可以使用命名占位符来指定要替换的参数,这样可以增加代码的可读性和可维护性。

string name = "Tom";
int age = 18;
string message = string.Format("My name is {name}, and I'm {age} years old.", new { name, age });
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.

在上面的例子中,我们使用了一个匿名类型来传递参数,其中name和age是属性名,它们将作为命名占位符在字符串中进行替换。 总的来说,string.format()方法是一个非常实用的字符串格式化工具,可以帮助我们将数据以指定的方式输出到字符串中。熟练掌握它的用法可以提高我们的代码质量和效率。


4.使用参数格式化选项

我们还可以使用参数格式化选项,以便更好地控制输出的格式。参数格式化选项由冒号(:)和格式说明符组成,格式说明符用于指定输出的格式。下面是一些常用的参数格式化选项及示例:

? ? ?int number = 12345;
string message = string.Format("The number is {0:C2}.", number);
Console.WriteLine(message);
// 输出:The number is $12,345.00.

在上面的例子中,{0:C2}指定了将数字格式化为货币形式,其中C表示货币,2表示小数点后保留两位。

double pi = 3.1415926;
string message = string.Format("The value of pi is approximately {0:P2}.", pi);
Console.WriteLine(message);
// 输出:The value of pi is approximately 314.16%.

在上面的例子中,{0:P2}指定了将数字格式化为百分比形式,其中P表示百分号,2表示小数点后保留两位。

string name = "Tom";
string message = string.Format("Hello, {0,-10}!", name);
Console.WriteLine(message);
// 输出:Hello, Tom       !

在上面的例子中,{0,-10}指定了将字符串左对齐,并在字符串后面添加空格,以便达到总长度为10的效果。

常用的数值格式化命令:

字符 说明 示例 输出
C 货币 string.Format(“{0:C}”, 9) ¥9.00
D 十进制 string.Format(“{0:D}”, 9) 9
E 科学计数法 string.Format(“{0:E}”, 12345) 1.234500E+004
F 小数 string.Format(“{0:F}”, 12345) 12345.00
G 常规 string.Format(“{0:G}”, 12345) 12345
N 用逗号隔开的数字 string.Format(“{0:N}”, 12345) 12,345.00
P 百分比 string.Format(“{0:P}”, 0.12345) 12.35%
X 十六进制 string.Format(“{0:X}”, 12) C
占位符 string.Format(“{0:000.000}”, 12.3) 012.300
4.1、格式化为货币形式
string.Format(“{0:C}”,9);   //¥9.00(英文操作系统结果:$9.00)
string.Format(“{0:C1}”,9.67); //¥9.7(截取时自动四舍五入)
string.Format(“{0:c}”,9);    //¥9.00
string.Format(“{0:c1}”,9.67);  //¥9.7

格式化多个object对象
string.Format(“原价{0:c1},活动价{1:c3}”, 9,7.8666); //原价¥9.0,活动价¥7.867

4.2、格式化为十进制形式(仅限整型)
string.Format(“{0:D}”,9);    //9
string.Format(“{0:D3}”,9);    //009,精度表示结果字符串的最小长度
string.Format(“{0:D3}”,12345); //12345,结果字符串的长度不会小于数据原厂度
string.Format(“{0:d}”,9);    //9
string.Format(“{0:d3}”,9);    //009
string.Format(“{0:d3}”,12345); //12345

4.3、格式化为科学计数法形式
string.Format(“{0:E}”,12345); //1.234500E+004
string.Format(“{0:E3}”,12345); //1.235E+004
string.Format(“{0:e}”,12345); //1.234500e+004
string.Format(“{0:e3}”,12345); //1.235e+004

4.4、格式化为小数形式
string.Format(“{0:F}”,123.678); //123.68,默认保留两位小数且截取时自动四舍五入
string.Format(“{0:F3}”,123.678); //123.678
string.Format(“{0:f}”,123.678); //123.68
string.Format(“{0:f3}”,123.678); //123.678

4.5、格式化为常规形式
string.Format(“{0:G}”,12345); //12345
string.Format(“{0:G3}”,12345); //1.23E+04
string.Format(“{0:g}”,12345); //12345
string.Format(“{0:g3}”,12345); //1.23e+04

4.6、格式化为用逗号隔开的数字形式
string.Format(“{N}”,12345); //12,345.00,默认保留两位小数
string.Format(“{N3}”,12345); //12,345.000
string.Format(“{n}”,12345); //12,345.00
string.Format(“{n3}”,12345); //12,345.000

4.7、格式化为百分数形式
string.Format(“{0:P}”,0.12345); //12.35%,默认保留两位小数且截取时自动四舍五入
string.Format(“{0:P3}”,0.12345); //12.345%
string.Format(“{0:p}”,0.12345); //12.35%
string.Format(“{0:p3}”,0.12345); //12.345%

4.8、格式化为十六进制形式(仅限整数)
string.Format(“{0:X}”,12); //C
string.Format(“{0:X3}”,12); //00C
string.Format(“{0:x}”,12); //c
string.Format(“{0:x3}”,12); //00c

4.9、格式化为占位符形式
string.Format(“{0:000.00}”,12.056); //012.06
string.Format(“{0:000.00}”,12.003); //012.00
string.Format(“{0:000.00}”,12.3);   //012.30
string.Format(“{0:###.##}”,12.056); //12.06
string.Format(“{0:###.##}”,12.003); //12
string.Format(“{0:###.##}”,12.3);  //12.3

零占位符:如果格式化的值在格式字符串中出现“0”的位置有一个数字,则此数字被复制到结果字符串中。小数点前最左边的“0”的位置和小数点后最右边的“0”的位置确定总在结果字符串中出现的数字范围。“00”格式字符串使得值被舍入到小数点前一位的数字,其中零不被舍去。
数字占位符:如果格式化的值在格式字符串中出现“#”的位置有一个数字,则此数字被复制到结果字符串中。否则,结果字符串中的此位置不存储任何值。“##”格式字符串使得值被舍入到小数点前一位的数字,其中零总要被舍去。
请注意:如果“0”不是有效数字,此说明符永不显示“0”字符,即使“0”是字符串中唯一的数字。如果“0”是所显示的数字中的有效数字,则显示“0”字符。

5. 使用格式化字符串

我们还可以使用格式化字符串来简化代码。格式化字符串是一种特殊的字符串,其中包含占位符和参数格式化选项,它们将在运行时动态替换为具体的值。下面是一个使用格式化字符串的示例:

double pi = 3.1415926;
string message = $"The value of pi is approximately {pi:F2}.";
Console.WriteLine(message);
// 输出:The value of pi is approximately 3.14.

在上面的例子中,我们使用了格式化字符串,并使用$符号将字符串前缀标记为格式化字符串。在格式化字符串中,我们可以使用{}来包含占位符和格式化选项,它们将在运行时动态替换为具体的值。

总的来说,C#中的string.format()方法提供了丰富的格式化选项,可以帮助我们将数据以指定的方式输出到字符串中。我们可以根据具体的需求选择不同的选项来控制输出的格式。同时,使用格式化字符串也是一种更为简洁和方便的方式。



6.处理复杂对象

除了基本数据类型,我们还可以使用string.format()方法来处理复杂对象,例如数组、集合、自定义类型等。下面是一些示例:

int[] numbers = { 1, 2, 3, 4, 5 };
string message = string.Format("The numbers are {0}.", string.Join(", ", numbers));
Console.WriteLine(message);
// 输出:The numbers are 1, 2, 3, 4, 5.
List names = new List { "Tom", "Jerry", "Lucy" };
string message = string.Format("The names are {0}.", string.Join(", ", names));
Console.WriteLine(message);
// 输出:The names are Tom, Jerry, Lucy.
class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
Person person = new Person { Name = "Tom", Age = 18 };
string message = string.Format("My name is {0}, and I'm {1} years old.", person.Name, person.Age);
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.

在上面的示例中,我们分别使用了数组、集合和自定义类型来进行格式化。


7. 使用格式化字符串常量

我们还可以定义格式化字符串常量,以便在多个地方重复使用。格式化字符串常量是一种特殊的常量,其中包含占位符和参数格式化选项,它们将在运行时动态替换为具体的值。下面是一个使用格式化字符串常量的示例:

const string MESSAGE_FORMAT = "My name is {0}, and I'm {1} years old.";
string name = "Tom";
int age = 18;
string message = string.Format(MESSAGE_FORMAT, name, age);
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.


在上面的示例中,我们定义了一个名为MESSAGE_FORMAT的格式化字符串常量,并在代码中使用它来进行格式化。
总的来说,C#中的string.format()方法可以处理各种类型的数据和对象,并提供了丰富的格式化选项,可以帮助我们将数据以指定的方式输出到字符串中。使用格式化字符串常量可以帮助我们简化代码,并提高代码的可读性和可维护性。

8.使用索引号和属性名格式化

除了使用占位符来格式化字符串外,我们还可以使用索引号和属性名来指定要格式化的参数。这种方式可以更加灵活地控制参数的顺序和格式。下面是一些示例:

string message = string.Format("{1}, {0}.", "Tom", "Hello");
Console.WriteLine(message);
// 输出:Hello, Tom.
string message = string.Format("My name is {0.Name}, and I'm {0.Age} years old.", new Person { Name = "Tom", Age = 18 });
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.

在上面的示例中,我们分别使用了索引号和属性名来指定要格式化的参数。使用索引号时,我们可以在占位符中使用数字来指定参数的索引号。使用属性名时,我们可以在占位符中使用.符号和属性名来指定参数的属性。


9. 自定义格式化器
在某些情况下,我们可能需要自定义特定类型的格式化方式。这时,我们可以实现自定义格式化器来满足需求。自定义格式化器是一种实现了IFormatProvider和ICustomFormatter接口的类,它可以接受一个格式字符串和一个对象,然后根据格式字符串来格式化对象。下面是一个示例:

class PersonFormatter : IFormatProvider, ICustomFormatter
{
    public object GetFormat(Type formatType)
    {
        if (formatType == typeof(ICustomFormatter))
        {
            return this;
        }
        else
        {
            return null;
        }
    }
    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        if (arg.GetType() == typeof(Person) && !string.IsNullOrEmpty(format))
        {
            Person person = (Person)arg;
            switch (format.ToUpper())
            {
                case "N":
                    return person.Name;
                case "A":
                    return person.Age.ToString();
                default:
                    break;
            }
        }
        return arg.ToString();
    }
}
Person person = new Person { Name = "Tom", Age = 18 };
string message = string.Format(new PersonFormatter(), "My name is {0:N}, and I'm {0:A} years old.", person);
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.

在上面的示例中,我们定义了一个名为PersonFormatter的自定义格式化器,并实现了GetFormatFormat方法。在GetFormat方法中,我们判断传入的参数是否为ICustomFormatter类型,并返回当前格式化器对象。在Format方法中,我们判断传入的参数是否为Person类型,并根据格式字符串来格式化对象。最后,我们使用string.Format方法,并将自定义格式化器对象作为参数传入,来实现自定义格式化。
总的来说,C#中的string.format()方法提供了丰富的格式化选项,可以帮助我们将数据以指定的方式输出到字符串中。通过使用索引号和属性名,我们可以更加灵活地控制参数的顺序和格式。而通过实现自定义格式化器,我们可以满足特定类型的自定义格式化需求。


10.使用字符串插值

除了使用string.format()方法外,C#还提供了一种更加简洁、直观的字符串格式化方式,即字符串插值。字符串插值是一种将表达式嵌入到字符串中的方式,它使用$符号和大括号{}来指示表达式。下面是一个示例:

string name = "Tom";
int age = 18;
string message = $"My name is {name}, and I'm {age} years old.";
Console.WriteLine(message);
// 输出:My name is Tom, and I'm 18 years old.

在上面的示例中,我们使用了字符串插值来格式化字符串。在字符串中,我们使用$符号和大括号{}来指示表达式,然后在表达式中使用变量、属性、方法等来生成字符串。字符串插值可以让代码更加简洁、直观,同时也提供了丰富的格式化选项,例如带格式的数字、日期等。下面是一些示例:

int number = 123456;
string message = $"The number is {number:N0}.";
Console.WriteLine(message);
// 输出:The number is 123,456.
DateTime date = DateTime.Now;
string message = $"Today is {date:yyyy-MM-dd}.";
Console.WriteLine(message);
// 输出:Today is 2022-06-14.

在上面的示例中,我们使用了带格式的数字和日期来进行字符串插值。使用字符串插值时,我们可以在表达式中使用大括号{}来指示格式化选项,然后在选项中使用格式化字符串来指定格式。 总的来说,字符串插值是一种更加简洁、直观的字符串格式化方式,它提供了丰富的格式化选项,可以帮助我们将数据以指定的方式输出到字符串中。

Tags:date_format

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言