Форматирование и интерполяция строк: stringformat в C#
Вывод на экран отформатированной строки для передачи информации — распространенная задача при разработке ПО. В C# StringFormat
позволяет форматировать строки проще, быстрее и удобнее, чем при использовании конкатенации. Как этот метод работает, какие предоставляет возможности и какие есть способы форматирования — изучим в этой статье.
Содержание:
1.Как форматировать строки в C#
1.1 Описатели форматов
1.2 Валюта
1.3 Целые числа
1.4 Дробные числа
1.5 Проценты
1.6 Настраиваемые форматы
2. Использование метода ToString
3. Интерполяция строк
4. Итог по применению
Как форматировать строки в C# с помощью String.Format
Мы уже рассказывали про базовые операции, которые позволяют работать со строками в C#. Здесь мы подробнее рассмотрим форматирование строк.
Форматировать строки в C# помогает метод String.Format
. Он преобразует значения объектов в строки и затем вставляет их в результирующую строку.
Пример форматирования с помощью String.Format
:
string newString; newString = string.Format("There are {0} cats in my {1} and no {2}", 2, "house", "dogs"); // There are 2 cats in my house and no dogs
Форматирование — это встраивание в строку различных элементов в заданном формате. Например, если нужно отобразить валюту, то мы подставляем к числу ее соответствующий символ — доллар, евро или другой. Если нужно показать проценты, то мы умножаем число на 100 и подставляем знак процента.
Описатели форматов
Для представления чисел в C# используются следующие описатели:
Описатель формата | Описание |
“C” или “c” | Валюта |
“D” или “d” | Целое число |
“E” или “e” | Экспоненциальный вид |
“F” или “f” | Фиксированная запятая |
“G” или “g” | Наиболее компактная запись из двух вариантов: “E” и “F” |
“P” или “p” | Проценты |
“X” или “x” | Шестнадцатеричное представление числа |
Любой другой символ | Исключение FormatException |
В таблице представлены лишь некоторые описатели. Подробную информацию по всем описателям и их свойствам смотрите в документации.
Мы же здесь пройдёмся по примерам использования, чтобы вы могли попробовать форматирование на практике.
String.Format
также используется для преобразования даты и времени. С его помощью можно отобразить DateTime
так, как вам хочется: сначала дату, сначала время, год в двузначном формате, год в четырехзначном формате.
Таблица описателей формата даты и времени с подробными объяснениями и примерами также есть в документации.
Валюта
Для форматирования валюты используется описатель “C” или “c”’. Знак валюты зависит от того, какая локаль установлена. Например, если это en-US, то в строке будет отображаться знак доллара, а если fr-FR, то знак евро.
После описателя можно указать, сколько знаков требуется отобразить после запятой.
Пример:
double number = 35.8; string str = string.Format("{0:C2}", number); // $35.80 string str2 = string.Format("{0:C1}", number); // $35.8
Целые числа
Для форматирования целых чисел используется описатель ‘D’ или ‘d’.
Пример:
int intNum = 33; str = string.Format("{0:d}",intNum); // 33 str = string.Format("{0:d4}", intNum); // 0033
После описателя можно явно указать, сколько символов должно отобразиться при выводе. Если в числе нет столько знаков, то в начале будут добавлены нули.
Дробные числа
Для форматирования дробных чисел используется описатели “E”, “F” или “G”:
Подробнее о разнице между этими тремя описателями можно узнать из документации.
Примеры:
double dNum = 12.4567; str = string.Format("{0:E}", dNum); // 1,245670E+001 str = string.Format("{0:E2}", dNum); // 1,25E+001 str = string.Format("{0:F3}", dNum); // 12,457 str = string.Format("{0:G}", dNum); // 12,4567
После описателя указывается, сколько знаков должно быть после разделителя (запятой в русской локали). Если количество знаков после запятой меньше, чем у числа, то число автоматически округляется в соответствии с правилами.
Проценты
Для форматирования процентов используется описатель ‘P’ или ‘p’.
Пример:
double percent = 0.45221; str = string.Format("{0:P}", percent); // 45,22% str = string.Format("{0:P1}", percent); // 45,2%
С помощью цифры после описателя можно управлять количеством знаком, которые будут отображаться в дробной части.
Настраиваемые форматы
C# предоставляет возможность настраивать формат вывода. Например, в качестве заместителя цифры используется символ #. С его помощью удобно представлять число как номер телефона:
long phone = 12345678910; str = string.Format("{0:+#(###)###-##-##}", phone); // +1(234)567-89-10
Настраиваемых числовых форматов тоже много. Например, знак “.” — это разделитель. С его помощью определяется разделитель целой и дробной частей в результирующей строке. Знак “%” — заместитель процента. Есть также настраиваемые форматы даты и времени.
Полный список настраиваемых числовых форматов и форматов даты и времени с подробными объяснениями и примерами доступен в документации.
Использование метода ToString
Метод ToString
позволяет получить строковое описание объекта для дальнейшего форматирования. Он работает с теми же описателями, которые доступны методу Format
.
Например, принимаем число, преобразуем его в строку и форматируем — по маске превращаем число в номер телефона:
long num = 12345678910; Console.WriteLine(num.ToString("+# (###) ###-##-##")); // +1 (234) 567-89-10
Принимаем число, используем описатель ‘C’, чтобы отобразить валюту, и указываем количество символов после запятой.
double price = 10,50; Console.WriteLine(price.ToString("C1")); // $10,5
Интерполяция строк
Интерполяция строк — упрощенный механизм форматирования строк. Он появился в версии C# 6.0.
Интерполяция позволяет сделать код более читабельным, а также выполнять логические и математические операции с объектами непосредственно во время форматирования. Чтобы использовать интерполяцию, достаточно указать перед строкой символ доллара — $.
Простой пример:
User user = new User { Name = "Oleg", Surname = "Petrov", Age = 35 }; Console.WriteLine($"Имя {user.Name} Фамилия {user.Surname} Возраст {user.Age}"); // Имя Oleg Фамилия Petrov Возраст 35
А в этом примере мы проверяем объект. Если он равен null
, то выводим дефолтное значение:
User user = null; Console.WriteLine($"Имя {user?.Name ?? "Пусть тогда зовут Олег"}"); // Имя Пусть тогда зовут Олег
А вот пример с использованием настраиваемого формата:
long num = 12345678910; Console.WriteLine($"{num:+# ### ### ## ##}"); // +1 234 567 89 10
Можно выполнять математические операции прямо во время форматирования:
double x = 15.59; double y = 19.17; Console.WriteLine($"{x} + {y} = {x + y}"); // 15,59 + 19,17 = 34,76
И добавлять пространство до или после вывода:
Console.WriteLine($"Имя: {person.Name, -10} Возраст: {person.Age, -10}"); // 10 пробелов после Console.WriteLine($"Имя: {person.Name, 10} Возраст: {person.Age, 10}"); // 10 пробелов до
Как видите, возможностей для форматирования много, а пользоваться ими очень удобно.
Заключение
C# предлагает разные способы для форматирования строк. Для самых простых случаев, когда достаточно просто соединить несколько строк вместе, достаточно использовать конкатенацию.
Если же речь идёт о более глубоком форматировании — например, изменении количества знаков после запятой или перевода в проценты, то потребуется метод String.Format
.
Вместо метода String.Format
можно использовать интерполированные строки. Их плюс — более удобный и понятный синтаксис.
Видео для закрепления материала:
https://youtu.be/K8O1XaNInJE
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: