Полное руководство по языку программирования С# 14 и платформе .NET 10 / Работа со строками

Форматирование и интерполяция строк

Начальный ⏱ 4 мин чтения 👁 2 🕓 обновлено 11.08.2026

Форматирование строк

При выводе строк в консоли с помощью метода Console.WriteLine для встраивания значений в строку мы можем применять форматирование вместо конкатенации:


string name = "Tom";
int age = 23;

Console.WriteLine("Имя: {0}  Возраст: {1}", name, age);
// консольный вывод
// Имя: Tom  Возраст: 23

В строке "Имя: {0} Возраст: {1}" на место {0} и {1} затем будут вставляться в порядке следования значения переменныйх name и age

То же самое форматирование в строке мы можем сделать не только в методе Console.WriteLine, но и в любом месте программы с помощью метода string.Format:


string name = "Tom";
int age = 23;
string output = string.Format("Имя: {0}  Возраст: {1}", name, age);
Console.WriteLine(output);

Метод Format принимает строку с плейсхолдерами типа {0}, {1} и т.д., а также набор аргументов, которые вставляются на место данных плейсхолдеров. В итоге генерируется новая строка.

Спецификаторы форматирования

В методе Format могут использоваться различные спецификаторы и описатели, которые позволяют настроить вывод данных. Рассмотрим основные описатели. Все используемые форматы:

C / c

Задает формат денежной единицы, указывает количество десятичных разрядов после запятой

D / d

Целочисленный формат, указывает минимальное количество цифр

E / e

Экспоненциальное представление числа, указывает количество десятичных разрядов после запятой

F / f

Формат дробных чисел с фиксированной точкой, указывает количество десятичных разрядов после запятой

G / g

Задает более короткий из двух форматов: F или E

N / n

Также задает формат дробных чисел с фиксированной точкой, определяет количество разрядов после запятой

P / p

Задает отображения знака процентов рядом с число, указывает количество десятичных разрядов после запятой

X / x

Шестнадцатеричный формат числа

Форматирование валюты

Для форматирования валюты используется описатель "C":


double number = 23.7;
string result = string.Format("{0:C0}", number);
Console.WriteLine(result); // 24 р.
string result2 = string.Format("{0:C2}", number);
Console.WriteLine(result2); // 23,70 р.

Число после описателя указывает, сколько чисел будет использоваться после разделителя между целой и дробной частью. При выводе также добавляется обозначение денежного знака для текущей культуры компьютера. В зависимости от локализации текущей операционной системы результат может различаться. Также обратите внимание на округление в первом примере.

Форматирование целых чисел

Для форматирования целочисленных значение применяется описатель "d":


int number = 23;
string result = string.Format("{0:d}", number);
Console.WriteLine(result); // 23
string result2 = string.Format("{0:d4}", number);
Console.WriteLine(result2); // 0023

Число после описателя указывает, сколько цифр будет в числовом значении. Если в исходном числе цифр меньше, то к нему добавляются нули.

Форматирование дробных чисел

Для форматирования дробны чисел используется описатель F, число после которого указывает, сколько знаков будет использоваться после разделителя между целой и дробной частью. Если исходное число - целое, то к нему добавляются разделитель и нули.


int number = 23;
string result = string.Format("{0:f}", number);
Console.WriteLine(result); // 23,00

double number2 = 45.08;
string result2 = string.Format("{0:f4}", number2);
Console.WriteLine(result2); // 45,0800

double number3 = 25.07;
string result3 = string.Format("{0:f1}", number3);
Console.WriteLine(result3); // 25,1

Формат процентов

Описатель "P" задает отображение процентов. Используемый с ним числовой спецификатор указывает, сколько знаков будет после запятой:


decimal number = 0.15345m;
Console.WriteLine("{0:P1}", number);// 15,3%

Настраиваемые форматы

Используя знак #, можно настроить формат вывода. Например, нам надо вывести некоторое число в формате телефона +х (ххх)ххх-хх-хх:


long number = 19876543210;
string result = string.Format("{0:+# (###) ###-##-##}", number);
Console.WriteLine(result); // +1 (987) 654-32-10

Метод ToString

Метод ToString() не только получает строковое описание объекта, но и может осуществлять форматирование. Он поддерживает те же описатели, что используются в методе Format:


long number = 19876543210;
Console.WriteLine(number.ToString("+# (###) ###-##-##"));// +1 (987) 654-32-10

double money = 24.8;
Console.WriteLine(money.ToString("C2")); // 24,80 р.

Интерполяция строк

Интерполяция строк призвана упростить форматирование строк. Так, перепишем пример с выводом значений переменных в строке:


string name = "Tom";
int age = 23;

Console.WriteLine($"Имя: {name}  Возраст: {age}");
// консольный вывод
// Имя: Tom  Возраст: 23

Знак доллара перед строкой указывает, что будет осуществляться интерполяция строк. Внутри строки опять же используются плейсхолдеры {...}, только внутри фигурных скобок уже можно напрямую писать те выражения, которые мы хотим вывести.

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


int x = 8;
int y = 7;
string result = $"{x} + {y} = {x + y}";
Console.WriteLine(result); // 8 + 7 = 15

Также внутри фигурных скобок можно выполнять более сложные выражения, например, вызывать методы:


int x = 8;
int y = 7;
string result = $"{x} * {y} = {Multiply(x, y)}";
Console.WriteLine(result); // 8 * 7 = 56

int Multiply(int a, int b) => a * b;

Уже внутри строки можно применять форматирование. В этом случае мы можем применять все те же описатели, что и в методе Format. Например, выведем номер телефона в формате +x xxx-xxx-xx-xx:


long number = 19876543210;
Console.WriteLine($"{number:+# ### ### ## ##}"); // +1 987 654 32 10

Добавляем пространство до и после форматируемого вывода:


string name = "Tom";
int age = 23;

Console.WriteLine($"Имя: {name, -5} Возраст: {age}"); // пробелы после
Console.WriteLine($"Имя: {name, 5} Возраст: {age}"); // пробелы до

Вывод:


Имя: Том        Возраст: 23
Имя: Том        Возраст: 23

Проверь себя

📋 Тест по теме «Форматирование и интерполяция строк» Тест по теме

Практические задания

Лёгкое Ручная проверка Заполните пропуск в коде (1)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string _____ = "Tom";
int age = 23;

Console.WriteLine("Имя: {0}  Возраст: {1}", name, age);
// консольный вывод
// Имя: Tom  Возраст: 23
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (2)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

string name = "_____";
int age = 23;
string output = string.Format("Имя: {0}  Возраст: {1}", name, age);
Console.WriteLine(output);
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (3)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

double number = _____.7;
string result = string.Format("{0:C0}", number);
Console.WriteLine(result); // 24 р.
string result2 = string.Format("{0:C2}", number);
Console.WriteLine(result2); // 23,70 р.
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (4)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int number = 23;
string result = string._____("{0:d}", number);
Console.WriteLine(result); // 23
string result2 = string.Format("{0:d4}", number);
Console.WriteLine(result2); // 0023
Войдите, чтобы отправить решение
Лёгкое Ручная проверка Заполните пропуск в коде (5)
+10 XP

В приведённом ниже фрагменте кода из этого урока пропущено одно слово. Определите его и впишите в поле ответа (без кавычек и пробелов).

int number = 23;
string result = string.Format("{_____:f}", number);
Console.WriteLine(result); // 23,00

double number2 = 45.08;
string result2 = string.Format("{0:f4}", number2);
Console.WriteLine(result2); // 45,0800

double number3 = 25.07;
string result3 = string.Format("{0:f1}", number3);
Console.WriteLine(result3); // 25,1
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (1)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string name = "_____";
int age = 23;

Console._____("Имя: {0}  Возраст: {1}", name, age);
// консольный вывод
// Имя: Tom  Возраст: 23
Войдите, чтобы отправить решение
Среднее Ручная проверка Восстановите код по памяти (2)
+20 XP

В этом фрагменте кода урока пропущены два ключевых элемента. Впишите оба пропущенных значения через запятую в порядке появления (например: x, 5).

string name = "Tom";
int _____ = 23;
string output = string.Format("Имя: {0}  Возраст: {1}", name, _____);
Console.WriteLine(output);
Войдите, чтобы отправить решение
Среднее Ручная проверка Расставьте строки кода в правильном порядке
+20 XP

Строки кода из примера этого урока перемешаны. Впишите их в правильном порядке, каждую строку — с новой строки.

int age = 23;
// Имя: Tom  Возраст: 23
// консольный вывод
Console.WriteLine("Имя: {0}  Возраст: {1}", name, age);
string name = "Tom";
Войдите, чтобы отправить решение
Сложное Ручная проверка Объясните и модифицируйте пример из урока «Форматирование и интерполяция строк»
+30 XP

Опишите своими словами, что делает приведённый пример кода из урока «Форматирование и интерполяция строк», и предложите одно осмысленное изменение (например, другое входное значение или дополнительное условие). Приведите итоговый код.

string name = "Tom";
int age = 23;

Console.WriteLine("Имя: {0}  Возраст: {1}", name, age);
// консольный вывод
// Имя: Tom  Возраст: 23
Войдите, чтобы отправить решение
Сложное Ручная проверка Найдите потенциальную проблему в коде урока «Форматирование и интерполяция строк»
+30 XP

Изучите приведённый фрагмент кода и опишите, при каких входных данных или условиях он может сработать не так, как ожидается (граничный случай, отсутствие проверки и т.п.). Предложите исправленный вариант.

string name = "Tom";
int age = 23;
string output = string.Format("Имя: {0}  Возраст: {1}", name, age);
Console.WriteLine(output);
Войдите, чтобы отправить решение
Мини-проект Ручная проверка Мини-проект по теме «Форматирование и интерполяция строк»
+50 XP

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

Войдите, чтобы отправить решение
Домашнее задание Ручная проверка Домашнее задание по теме «Форматирование и интерполяция строк»
+25 XP

Напишите собственную небольшую программу, применяющую материал темы «Форматирование и интерполяция строк». Используйте не менее одной конструкции, показанной в примерах урока. Прикрепите код решения и краткое описание того, что он делает.

Войдите, чтобы отправить решение

Обсуждение (0)

Войдите, чтобы оставить комментарий.