Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Tip
Эта статья является частью раздела "Основы" для разработчиков , которые уже знают хотя бы один язык программирования и учат C#. Если вы не знакомы с программированием, сначала начните с учебных пособий по началу работы.
Вы пришли из другого языка? Как и Java и JavaScript, строки C# неизменяемы: такие методы, как Replace и Trim возврат новой строки вместо изменения исходного кода. Шаблоны здесь аналогичны String методам в этих языках.
C# string является неизменяемым, что означает, что его содержимое никогда не изменяется после его создания. Каждый метод, который, как представляется, изменяет строку, фактически возвращает новое string с изменениями, оставляя исходный нетронутым. Примеры, приведенные в этой статье, сохраняют каждый результат в новой переменной, чтобы вы могли видеть как источник, так и измененное значение.
Выберите способ, соответствующий вашему сценарию: замените известный текст, обрезать пробелы, удалите диапазон символов, замените текст, соответствующий шаблону, или измените отдельные символы.
Замена известного текста
Метод String.Replace заменяет каждое вхождение одной строки другой и возвращает результат в виде новой строки:
string source = "The mountains are behind the clouds today.";
// Replace returns a new string; the original is unchanged.
string updated = source.Replace("mountains", "peaks");
Console.WriteLine(source);
// => The mountains are behind the clouds today.
Console.WriteLine(updated);
// => The peaks are behind the clouds today.
Исходная строка не изменяется, которая демонстрирует неизменяемость: Replace создает новую строку с подстановкой.
Replace также имеет перегрузку, которая переключает одиночные символы. Следующий пример заменяет каждое пространство символом подчеркивания:
string source = "The mountains are behind the clouds today.";
// Replace every occurrence of one character with another.
string updated = source.Replace(' ', '_');
Console.WriteLine(updated);
// => The_mountains_are_behind_the_clouds_today.
Обе перегрузки заменяют каждое совпадение в строке, а не только первое. Независимо от того, передаёте ли вы один символ или строку, Replace заменяет все вхождения за один вызов.
Обрезать пробелы
Используйте String.Trim, String.TrimStart и String.TrimEnd, чтобы удалить начальные или конечные пробелы. Каждый метод возвращает новую строку:
string source = " I'm wider than I need to be. ";
// Each method returns a new string with whitespace removed.
Console.WriteLine($"<{source.Trim()}>");
// => <I'm wider than I need to be.>
Console.WriteLine($"<{source.TrimStart()}>");
// => <I'm wider than I need to be. >
Console.WriteLine($"<{source.TrimEnd()}>");
// => < I'm wider than I need to be.>
Удалить фрагмент символов
Метод String.Remove удаляет ряд символов, начиная с индекса. Объедините его с String.IndexOf, чтобы найти текст для удаления:
string source = "Many mountains are behind many clouds today.";
string toRemove = "many ";
// Find the text, then remove that span by index and length.
int index = source.IndexOf(toRemove);
string result = index >= 0
? source.Remove(index, toRemove.Length)
: source;
Console.WriteLine(result);
// => Many mountains are behind clouds today.
Замена текста, соответствующего шаблону
Если необходимо заменить текст, который следует шаблону, а не точной строке, используйте регулярные выражения. Метод Regex.Replace принимает функцию, вычисляющую каждую замену, чтобы можно было сохранить такие сведения, как исходная заглавная буква. Шаблон the\s совпадает с "the", за которым следует пробельный символ, что не позволяет ему совпадать с "there":
string source = "The mountains are still there behind the clouds today.";
// Replace "the" or "The" followed by whitespace, preserving the original case.
// The \s in the pattern keeps "there" from matching.
string result = Regex.Replace(
source,
"""the\s""",
match => char.IsUpper(match.Value[0]) ? "Many " : "many ",
RegexOptions.IgnoreCase);
Console.WriteLine(result);
// => Many mountains are still there behind many clouds today.
Сведения о поиске по шаблону, а не о замене, см. в разделе Поиск строк в C#. Сведения о синтаксисе регулярного выражения см. в кратком справочнике по языку регулярных выражений.
Изменение отдельных символов
Чтобы изменить символы по позиции, скопируйте строку в Span<T> символы, измените диапазон и создайте новую строку из нее. Следующий пример находит слово "лиса" и заменяет его на "кот":
string phrase = "The quick brown fox jumps over the fence.";
// A string is immutable, so copy it into a Span<char> to edit in place.
Span<char> characters = stackalloc char[phrase.Length];
phrase.CopyTo(characters);
int index = phrase.IndexOf("fox");
if (index != -1)
{
characters[index] = 'c';
characters[index + 1] = 'a';
characters[index + 2] = 't';
}
// Build a new string from the modified characters.
string updated = new string(characters);
Console.WriteLine(updated);
// => The quick brown cat jumps over the fence.
Для высокопроизводительных сценариев, в которых удаётся избежать промежуточных выделений памяти, среда выполнения предоставляет низкоуровневые API, такие как String.Create. Эти методы являются расширенными; для повседневного кода методы в этой статье являются правильным выбором.