Вывод на экран отформатированной строки для передачи информации — распространенная задача при разработке ПО. В C# StringFormat
позволяет форматировать строки проще, быстрее и удобнее, чем при использовании конкатенации. Как этот метод работает, какие предоставляет возможности и какие есть способы форматирования — изучим в этой статье.
Содержание:
1.Как форматировать строки в C#
1.1 Описатели форматов
1.2 Валюта
1.3 Целые числа
1.4 Дробные числа
1.5 Проценты
1.6 Настраиваемые форматы
2. Использование метода ToString
3. Интерполяция строк
4. Итог по применению
Мы уже рассказывали про базовые операции, которые позволяют работать со строками в 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
позволяет получить строковое описание объекта для дальнейшего форматирования. Он работает с теми же описателями, которые доступны методу 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
можно использовать интерполированные строки. Их плюс — более удобный и понятный синтаксис.
Видео для закрепления материала:
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…