Содержание
При разработке программного обеспечения достаточно часто необходимо вывести на экран строку, содержащую какую-либо информацию по объекту. Для этого мы можем воспользоваться конкатенацией строк 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#, то эта относительно новая возможность языка позволяет вам сделать код более компактным и читабельным по сравнению с простым форматированием так как значения объектов вставляются непосредственно в интерполируемую строку без использования дополнительных элементов типа объектов форматирования.