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的自定义格式化器,并实现了GetFormat和Format方法。在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