Содержание
При разработке программного обеспечения достаточно часто необходимо вывести на экран строку, содержащую какую-либо информацию по объекту. Для этого мы можем воспользоваться конкатенацией строк C#, а можем использовать более удобный способ — форматирование строки. Как мы уже знаем из прошлой статьи про методы строк в C#, для этого существует специальные метод Fotmat()
, но рассмотрим всё по порядку.
Форматирование строк C# в консоли
Используя метод Console.WriteLine()
, мы можем форматировать строки следующим образом:
class Program { static void Main(string[] args) { Person person = new Person { Name = "Ivan", Family = "Ianov", Age = 25}; Console.WriteLine("Имя {0}\n\rФамилия {1}\n\rВозраст {2}", person.Name, person.Family, person.Age); } } class Person { public string Name { get; set; } public string Family { get; set; } public byte Age { get; set; } }
Рассмотрим этот пример подробнее. В нашей программе определен класс Person
, содержащий сведения о человеке: имя, фамилия и возраст. В методе Main()
мы создаем объект класса Person
и задаем значения свойствам объекта. Далее, в методе Console.WriteLine()
мы форматируем строку — в первом параметре метода указываем строку формата, а в последующих — значения, которые необходимо подставить в нашу строку.
Специальные элементы в строке формата {0}
, {1}
, {2}
называются элементами формата или, как ещё их называют, плейсхолдеры . Каждый элемент формата имеет свой индекс (в нашем случае — это индексы 1
, 2
и 3
).
Если вставляемый в строку объект не является строкой, то вызывается его метод ToString()
преобразующий объект в строку.
Все объекты вставляются в строку в порядке их указания в методе Console.WriteLine()
, то есть, в нашем случае, вместо первого элемента формата будет вставлено имя, вместо второго — фамилия, а вместо третьего — возраст.
Аналогичным образом работает и метод строк Format()
о котором мы узнали из прошлой статьи. При форматировании строк могут использоваться различные описатели формата. Рассмотрим основные из них.
Описатели формата строк
Описатель | Имя | Описание |
«C» или «c» | Валюта | значение валюты |
«D» или «d» | Decimal | целочисленные цифры с необязательным отрицательным знаком. |
«E» или «e» | Экспоненциальный (научный) | экспоненциальная нотация |
«F» или «f» | С фиксированной запятой | цифры целой и дробной частей с необязательным отрицательным знаком |
«G» или «g» | Общее | наиболее компактная запись из двух вариантов — экспоненциального и с фиксированной запятой |
«N» или «n» | Число | цифры целой и дробной частей, разделители групп и разделитель целой и дробной частей с необязательным отрицательным знаком |
«P» или «p» | Процент | число, умноженное на 100 и отображаемое с символом процента. |
«X» или «x» | Шестнадцатеричный | шестнадцатеричная строка |
Работа с различными описателями формата строк показана ниже.
Форматирование валюты в C#
Для форматирования валюты в C# используется описатель "C"
или "c"
. Например:
double number = 25.9; string str = string.Format("{0:C2}", number); //25.90 string str2 = string.Format("{0:C1}", number); //25.9 string str3 = string.Format(CultureInfo.CreateSpecificCulture("US-us"), "{0:C1}", number); //$25.9
При использовании описателя "C"
настройки валюты используются, исходя из текущей локали пользователя.
Число после описателя указывает количество знаков после запятой (точность) числа. В этом примере стоит обратить также внимание на последнюю строку кода — здесь мы сами указали какую локаль использовать для вывода валюты. Для того, чтобы можно было вызвать метод Format()
с параметром CultureInfo
необходимо подключить пространство имен System.Globalization
.
Форматирование целых чисел в C#
Для форматирования целых чисел используется описатель "D"
или "d"
.
int intNumber = 23; str = string.Format("{0:d}",intNumber);//23 Console.WriteLine(str); str = string.Format("{0:d4}", intNumber);//0023 Console.WriteLine(str);
Число после описателя указывает сколько цифр будет содержать число. Если число содержит меньшее количество цифр, чем указано в формате, то при форматировании к числу будут добавлены лидирующие нули как это показано в примере.
Форматирование дробных чисел в C#
Для форматирования дробных чисел в C# могут использоваться описатели "E"
, "F"
или "G"
. Рассмотрим работу этих описателей на примере.
double dNumber = 12.4567; str = string.Format("{0:E}", dNumber);//1,245670E+001 Console.WriteLine(str); str = string.Format("{0:E2}", dNumber);//1,25E+001 Console.WriteLine(str); str = string.Format("{0:F}", dNumber);//12,46 Console.WriteLine(str); str = string.Format("{0:F3}", dNumber);//12,457 Console.WriteLine(str); str = string.Format("{0:G}", dNumber);//12,4567 Console.WriteLine(str); str = string.Format("{0:G1}", dNumber);//1E+01 Console.WriteLine(str);
Число после описателя указывает сколько знаков после разделителя (в русской локали — это запятая) будет выведено для числа. Обратите внимание также на то, что, если вы указываете количество знаков после запятой меньше, чем есть у числа, то при форматировании «лишние» знаки не просто обрезаются, а число именно округляется.
Форматирование процентов в C#
Для форматирования процентов в C# используется описатель "P"
или "p"
.
double percent = 0.44231; str = string.Format("{0:P}", percent);//44,23% Console.WriteLine(str); str = string.Format("{0:P1}", percent);//44,2% Console.WriteLine(str);
Число после описателя также указывает на количество знаков в дробной части. При этом, обратите внимание, что при использовании описателя "P"
число умножается на 100.
Настраиваемые форматы в C#
В C# есть также возможность использовать настраиваемые форматы. Для этого необходимо использовать символ "#"
. Например, представим число в формате, используемом для описание номера телефона
Console.WriteLine("Настраиваемый формат строк"); long phone = 79118844578; str = string.Format("{0:+#(###)###-##-##}", phone);//+7(911)884-45-78 Console.WriteLine(str);
Интерполяция строк в C#
Начиная с версии C# 6.0 в языке появилась новая возможность форматирования строк — интерполяция строк. Интерполяция строк в C# позволяет не только сделать ваш код более читабельным, но и непосредственно при форматировании строки осуществлять логические и математические операции с объектами. Для использования интерполяции строк необходимо перед строкой указывать символ доллара — "$"
. Рассмотрим некоторые примеры интерполяции строк в C#.
Person person2 = new Person { Name = "Ivan", Family = "Ianov", Age = 25 }; Console.WriteLine($"Имя {person2.Name} Фамилия {person2.Family} Возраст {person2.Age}"); Person person3 = null; Console.WriteLine($"Имя {person3?.Name ?? "Имя по умолчанию - Вася"}");
В первом случае мы, как и в начале статьи, вывели имя, фамилию и возраст человека. При этом, обратите внимание, что при интерполяции строки мы указали внутри неё не элементы формата, а непосредственно значения, которые необходимо подставить в строку.
Во втором случае мы проверяем проинициализирован ли объект person3
и, если он равен null
, то выводим в консоль имя по умолчанию.
Что касается выполнения арифметических операций при интерполяции строк, то здесь можно привести вот такой пример:
double x = 12.23; double y = 15.37; Console.WriteLine($"{x} + {y} ={x + y}");//12,23 + 15,37 =27,6
Также, внутри интерполируемой строки можно использовать настраиваемые форматы, например:
long phone2 = 79118844578; string result = $"{phone2:+#-(###)-###-##-##}"; Console.WriteLine(result);
Как при форматировании, так и при интерполяции строк в C# мы можем использовать выравнивание значений. Например:
Console.WriteLine($"Имя: {person.Name,-5} Возраст: {person.Age,-3}"); // вставляем пробелы после Console.WriteLine($"Имя: {person.Name,5} Возраст: {person.Age,3}"); // вставляем пробелы до
Вывод в консоли будет следующим:
Имя: Ivan Возраст: 25
Итого
Сегодня мы рассмотрели основные моменты форматирования и интерполяции строк в C#. При форматировании строк мы можем использовать различные описатели формата, например, для вывода валюты, процентов, целых и дробных чисел и так далее. Конечно, количество описателей в C# больше, чем рассмотренные в статье, а возможности форматирования строк на порядок шире, однако, представленная в статье информация позволяет узнать основные моменты форматирования и использовать их для дальнейшего изучения темы. Что касается интерполяции строк в C#, то эта относительно новая возможность языка позволяет вам сделать код более компактным и читабельным по сравнению с простым форматированием так как значения объектов вставляются непосредственно в интерполируемую строку без использования дополнительных элементов типа объектов форматирования.