Строки в C#: форматирование и интерполяция строк

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.

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

К сожалению, при использовании русской локали «RU-ru» в консоли вместо значка рубля выводится знак вопроса. Эта проблема актуальна на момент написания этой статьи. Возможно, что в будущих версиях .NET эту проблему исправят

Число после описателя указывает количество знаков после запятой (точность) числа. В этом примере стоит обратить также внимание на последнюю строку кода — здесь мы сами указали какую локаль использовать для вывода валюты. Для того, чтобы можно было вызвать метод 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

Имя:    Ivan Возраст:    25

Итого

Сегодня мы рассмотрели основные моменты форматирования и интерполяции строк в C#. При форматировании строк мы можем использовать различные описатели формата, например, для вывода валюты, процентов, целых и дробных чисел и так далее. Конечно, количество описателей в C# больше, чем рассмотренные в статье, а возможности форматирования строк на порядок шире, однако, представленная в статье информация позволяет узнать основные моменты форматирования и использовать их для дальнейшего изучения темы. Что касается интерполяции строк в C#, то эта относительно новая возможность языка позволяет вам сделать код более компактным и читабельным по сравнению с простым форматированием так как значения объектов вставляются непосредственно в интерполируемую строку без использования дополнительных элементов типа объектов форматирования.

уважаемые посетители блога, если Вам понравилась, то, пожалуйста, помогите автору с лечением. Подробности тут.
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии