练习 - 了解填充和对齐
- 12 分钟
该方法 string.Format() 用于执行复合格式设置,如示例中所示:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
看起来有点奇怪,表示数据类型的关键字具有可按照 Console 类中方法的调用方式调用的方法。 事实是,string 数据类型上以及任何文本字符串或属于字符串类型的变量上都有许多类似的方法。
下面简要列出了这些内置方法的类别,以便你可以了解可能的情况。
- 用于为格式设置添加空白的方法 (
PadLeft(),PadRight()) - 比较两个字符串或促进比较的方法(
Trim()、TrimStart()、TrimEnd()、GetHashcode()、Length属性) - 帮助确定字符串内部内容的方法,甚至只检索字符串的一部分(
Contains()、、StartsWith()EndsWith()、Substring()) - 通过替换、插入或删除部分
Replace()(、Insert()、Remove()) 来更改字符串内容的方法 - 将字符串转换为字符串或字符数组的方法 (
Split(),ToCharArray())
通过在前后添加空格来设置字符串格式
该方法 PadLeft() 将空格添加到字符串的左侧,使字符总数等于发送该字符串的参数。 在这种情况下,需要字符串的总长度为 12 个字符。
删除或使用行注释运算符
//注释掉前面步骤中的所有代码。在 Visual Studio Code 编辑器中更新代码,如下所示:
string input = "Pad this"; Console.WriteLine(input.PadLeft(12));在 Visual Studio Code 的“文件”菜单上,选择“保存”。 在生成或运行代码之前保存Program.cs文件。
在“EXPLORER”面板中,若要在 TestProject 文件夹位置打开终端,请右键单击“TestProject”,然后选择“在集成终端中打开”。 终端面板应该打开,并应包含一个命令提示符,表明终端已在您的 TestProject 文件夹位置打开。
在终端命令提示符处,若要运行代码,请键入 dotnet run,然后按 Enter。
注释
如果看到一条消息“找不到要运行的项目”,请确保终端命令提示符显示预期的 TestProject 文件夹位置。 例如:
C:\Users\someuser\Desktop\csharpprojects\TestProject>运行代码时,你会发现有四个字符被加在字符串的左侧,使其总长度达到 12 个字符。
Pad this若要向字符串右侧添加空格或字符,请改用该方法
PadRight()。 1. 在 Visual Studio Code 编辑器中更新代码,如下所示:Console.WriteLine(input.PadRight(12));保存代码文件,然后使用 Visual Studio Code 运行代码。 不会观察到添加到字符串末尾的任何字符,但它们就在那里。
什么是重载方法?
在 C# 中, 重载方法 是另一个版本,该方法具有不同或额外参数,可稍微修改方法的功能,与该方法的 PadLeft() 重载版本的情况一样。
你还可以调用该方法的第二个重载版本,并传入你想用的任何字符来替代空格。 在本例中,你将使用短划线字符填充额外的空格。
删除或使用行注释运算符
//注释掉上一步中的所有代码。在 Visual Studio Code 编辑器中更新代码,如下所示:
Console.WriteLine(input.PadLeft(12, '-')); Console.WriteLine(input.PadRight(12, '-'));保存代码文件,然后使用 Visual Studio Code 运行代码。 你将看到长度为 12 个字符的字符串,其左侧有四个短划线作为前缀。
----Pad this Pad this----
现在,将此新发现的知识应用于另一个现实世界场景。
使用填充字符串
假设你为仍然支持旧大型机系统的付款处理公司工作。 通常,这些系统需要在特定列中输入数据。 例如,将付款 ID 存储在第 1 至 6 列中、付款人的姓名(列 7 到 30)和第 31 至 40 列中的付款金额。 此外,重要的是,付款金额采用右对齐的格式。
系统会要求你生成一个应用程序,该应用程序会将关系数据库管理系统中的数据转换为旧文件格式。 为了确保集成正常工作,第一步是通过向旧系统维护者提供输出示例来确认文件格式。 稍后,你将基于这项工作,通过 ASCII 文本文件传送数百或数千笔需要处理的付款。
将付款 ID 添加到输出
若要开始,请打印前六列中的付款 ID。 选择一些应足以满足目的的随机付款数据。
删除或使用行注释运算符
//注释掉上一步中的所有代码。在 Visual Studio Code 编辑器中更新代码,如下所示:
string paymentId = "769C"; var formattedLine = paymentId.PadRight(6); Console.WriteLine(formattedLine);重复使用变量
formattedLine来生成输出字符串。保存代码文件,然后使用 Visual Studio Code 运行代码。 应会看到以下输出:
769C
右侧有两个不可见的空白。 你将在下一步确认它们的存在。
将付款人名称添加到输出
接下来,添加虚构的“付款人姓名”,并相应地填充它。
在 Visual Studio Code 编辑器中更新代码,如下所示:
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); Console.WriteLine(formattedLine);+=运算符执行字符串连接,将变量formattedLine的原有值与新值进行合并。 以下代码示例的简化等效形式为:formattedLine = formattedLine + payeeName.PadRight(24);保存代码文件,然后使用 Visual Studio Code 运行代码。 应会看到以下输出:
769C Mr. Stephen Ortega
同样,在付款人姓名之后有相当多的空白空间。 此外,步骤 1 中的付款 ID 后还有两个空格。
将付款金额添加到输出
接下来添加虚构的付款金额,并确保使用 PadLeft() 使输出右对齐。
在 Visual Studio Code 编辑器中更新代码,如下所示:
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; string paymentAmount = "$5,000.00"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); formattedLine += paymentAmount.PadLeft(10); Console.WriteLine(formattedLine);保存代码文件,然后使用 Visual Studio Code 运行代码。 应会看到以下输出:
769C Mr. Stephen Ortega $5,000.00
此输出非常接近你理解的旧系统维护人员正在寻找的内容。
在输出上方添加一行数字,以便更轻松地确认结果
由于很难计算每个数据元素的确切列数,因此直接在输出上方添加一行,以帮助对列进行计数。
Console.WriteLine("1234567890123456789012345678901234567890");
在 Visual Studio Code 编辑器中更新代码,如下所示:
string paymentId = "769C"; string payeeName = "Mr. Stephen Ortega"; string paymentAmount = "$5,000.00"; var formattedLine = paymentId.PadRight(6); formattedLine += payeeName.PadRight(24); formattedLine += paymentAmount.PadLeft(10); Console.WriteLine("1234567890123456789012345678901234567890"); Console.WriteLine(formattedLine);保存代码文件,然后使用 Visual Studio Code 运行代码。 应会看到以下输出,可以发送到旧系统的维护人员,以确认新集成正常工作:
1234567890123456789012345678901234567890 769C Mr. Stephen Ortega $5,000.00
成功!
回顾
此单元中有几个重要的要点。
-
string数据类型、文本字符串和字符串类型的变量都实现了许多辅助方法,用于格式化、修改和执行其他字符串操作。 - 使用
PadLeft()和PadRight()方法可将空格(或可选其他字符)添加到字符串的总长度。 - 使用
PadLeft()来右对齐字符串。 - 某些方法被重载,这意味着它们具有多个版本的方法,具有影响其功能的不同参数。
- 运算符
+=将右侧的新字符串连接到左侧的现有字符串上。