C# 之 String.Format详解

有兴趣的同学可以去看官方文档 String.Format Method (System) | Microsoft Docs

本文仅对官方文档中的内容进行提炼和总结

功能描述:把一些对象(Object)的值转化为字符串,并按照formats里的格式塞到另外一个字符串里

函数重载

public static string Format(IFormatProvider provider, string format, object arg0)

public static string Format(IFormatProvider provider, string format, object arg0, object arg1)

public static string Format(IFormatProvider provider, string format, object arg0, object arg1, object arg2)

public static string Format(IFormatProvider provider, string format, params object[] args)

public static string Format(string format, object arg0)

public static string Format(string format, object arg0, object arg1)

public static string Format(string format, object arg0, object arg1, object arg2)

public static string Format(string format, params object[] args)

因为Format方法接收的参数是Object类型,所以对于值类型会涉及到装箱的操作

下面通过一些例子来详细介绍string.Format的用法:

如果你想要往另外一个字符串中插入某个object、variable、或者expression的值,那么就可以尝试使用String.Format,例如下面的例子:

Decimal pricePerOunce = 17.36m
String s = String.Format("The current price is {0} per ounce", pricePerOunce);
Console.WriteLine(s);
// Result: The current price is 17.36 per ounce.

你也可以去控制 大括号里的值 的 格式

Decimal pricePerOunce = 17.36m;
String s = String.Format("The current price is {0:C2} per ounce.", pricePerOunce);
Console.WriteLine(s);
// Result if current culture is en-US:
//      The current price is $17.36 per ounce.

除了控制格式之外,你还可以控制 对齐(alignment) 和 间隔 (spacing)

String.Format的参数列表中,先是一个格式化的字符串,后面跟要往该字符串指定位置(即 { } 的位置)中插入的对象或者表达式(数量可以是任意多个,虽然String.Format提供了好几种重载方式,其实你并不用去关心究竟在用哪一个)。

大括号里可以写数字,对应了这些待插入项的序号(即第几个),例如:

string s = String.Format("At {0}, the temperature is {1}°C.", DateTime.Now, 20.4);
Console.WriteLine(s);
// Output similar to: 'At 4/10/2015 9:29:41 AM, the temperature is 20.4°C.'

控制格式(Control Formating)

如上文所说,我们可以在大括号 { } 里通过添加数字来指定插入参数列表中的第几个数(例如 {0} ,表示格式化字符串后面的第一个参数),同时我们也可以在数字后面使用冒号‘:’再后缀一些符号来控制更具体一些的格式。

例如::d 提取了时间里的年月日  :t 提取了小时和分钟

string s = String.Format("It is now {0:d} at {0:t}", DateTime.Now);
Console.WriteLine(s);
// Output similar to: 'It is now 4/10/2015 at 10:04 AM'

这里读者可能会疑问:我咋知道有哪些字符串格式呢?确实这些格式化的种类还是比较多的,光靠记忆肯定是不行的,这里给出官方链接,按需要去查即可:

Standard numeric format strings​​​​​​

Standard date and time format strings | Microsoft Docs

Standard TimeSpan format strings | Microsoft Docs

Enumeration format strings | Microsoft Docs

你也可以使用一些格式的标识符(Format Specifier)来定制自己需要的格式类型

控制间距(Control Spacing)

你可以定义插入到目标字符串的字符串片段的宽度,例如,可以使用 {0,12} 表示插入的字符串的宽度为12

可以用于文本对齐,例如:

int[] years = { 2013, 2014, 2015 };
int[] population = { 1025632, 1105967, 1148203 };
var sb = new System.Text.StringBuilder();
sb.Append(String.Format("{0,6} {1,15}\n\n", "Year", "Population"));
for (int index = 0; index < years.Length; index++)
    sb.Append(String.Format("{0,6} {1,15:N0}\n", years[index], population[index]));

Console.WriteLine(sb);

// Result:
//      Year      Population
//
//      2013       1,025,632
//      2014       1,105,967
//      2015       1,148,203

控制左右对齐 (Control Alignment)

默认是右对齐,可以使用 如 {0, -12} 来设置为左对齐:

int[] years = { 2013, 2014, 2015 };
int[] population = { 1025632, 1105967, 1148203 };
String s = String.Format("{0,-10} {1,-10}\n\n", "Year", "Population");
for(int index = 0; index < years.Length; index++)
   s += String.Format("{0,-10} {1,-10:N0}\n",
                      years[index], population[index]);
Console.WriteLine($"\n{s}");
// Result:
//    Year       Population
//
//    2013       1,025,632
//    2014       1,105,967
//    2015       1,148,203

  • 12
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#中,string.Format是一个用于格式化字符串的方法。它可以将指定的参数插入到格式字符串中的占位符中。引用\[1\]和引用\[2\]提供了一些常见的示例,展示了如何使用string.Format来格式化数字。例如,可以使用"{0:N2}"来将一个数字格式化为带有两位小数的数字字符串。引用\[3\]列出了string.Format方法的不同重载形式,可以根据需要选择适合的重载形式来格式化字符串。 #### 引用[.reference_title] - *1* [C#string.format用法详解](https://blog.csdn.net/alili1991/article/details/101253536)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C# string.Format](https://blog.csdn.net/weixin_53370274/article/details/119328962)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C#String.Format详解](https://blog.csdn.net/zhaocg00/article/details/124539625)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值