Упражнение. Обнаружение заполнения и выравнивания
- 12 минут
Метод string.Format() используется для выполнения составного форматирования, например в примере:
string first = "Hello";
string second = "World";
string result = string.Format("{0} {1}!", first, second);
Console.WriteLine(result);
Возможно, это было немного странно, что ключевое слово, представляющее тип данных, имеет методы, которые можно вызывать так же, как и методы в Console классе. Дело в том, что существует множество аналогичных методов для string типа данных и любой литеральной строки или переменной типа 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 перед созданием или выполнением кода.
На панели обозревателя откройте терминал в папке 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----
Теперь примените эти новые знания к другому реальному сценарию.
Работа с заполненными строками
Предположим, вы работаете в компании по обработке платежей, которая по-прежнему поддерживает устаревшие системы мейнфреймов. Часто эти системы требуют ввода данных в определенных столбцах. Например, сохраните идентификатор оплаты в столбцах 1–6, имя получателя в столбцах 7–30 и сумму оплаты в столбцах 31–40. Кроме того, важно, чтобы сумма оплаты была выровнена по правому краю.
Вам будет предложено создать приложение, которое преобразует данные в систему управления реляционными базами данных в устаревший формат файла. Чтобы убедиться, что интеграция работает правильно, сначала необходимо подтвердить формат файла, предоставив администраторам устаревшей системы образец выходных данных. Позже вы разовьете эту работу для отправки сотен или тысяч платежей для обработки через текстовый файл ASCII.
Добавление идентификатора оплаты в выходные данные
Чтобы начать, напечатайте идентификатор платежа в первых шести столбцах. Вы выбираете некоторые случайные данные оплаты, которые должны быть достаточными для целей.
Удалите или используйте оператор однострочного комментария
//, чтобы закомментировать весь код из предыдущего шага.Обновите код в редакторе 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.
Добавление суммы оплаты к выходным данным
Затем добавьте вымышленную сумму платежа и убедитесь, что 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()для выравнивания строки по правому краю. - Некоторые методы перегружены, то есть они имеют несколько версий метода с различными аргументами, которые влияют на их функциональные возможности.
- Оператор
+=объединяет новую строку справа от существующей строки слева.