Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Практическое руководство. Изменение содержимого строки (Руководство по программированию в C#)




Обновлен: Июль 2008

Поскольку строки являются неизменяемыми, невозможно (без использования небезопасного кода) изменить значение объекта строки после его создания. Однако существует много способов изменения значения строки и сохранения результата в новом объекте строки. Класс System..::.String предоставляет методы, которые обрабатывают входную строку и возвращают новый объект строки. В большинстве случаев можно присвоить новый объект к переменной, содержавшей исходную строку. Класс System.Text.RegularExpressions..::.Regex предоставляет дополнительные методы, работающие аналогичным образом. КлассSystem.Text..::.StringBuilder предоставляет буфер символов, который можно изменить "на месте". Метод StringBuilder..::.ToString вызывается для создания нового объекта строки, который содержит текущее содержимое буфера.

Пример

В следующем примере показаны различные способы замены или удаления подстрок в указанной строке.

Язык C#

 

Копировать код

class ReplaceSubstrings

{

string searchFor;

string replaceWith;

 

static void Main(string[] args)

{

 

   ReplaceSubstrings app = new ReplaceSubstrings();

   string s = "The mountains are behind the clouds today.";

 

   // Replace one substring with another with String.Replace.

   // Only exact matches are supported.

   s = s.Replace("mountains", "peaks");

   Console.WriteLine(s);

   // Output: The peaks are behind the clouds today.

 

   // Use Regex.Replace for more flexibility.

   // Replace "the" or "The" with "many" or "Many".

   // using System.Text.RegularExpressions

   app.searchFor = "the"; // A very simple regular expression.

   app.replaceWith = "many";

   s = Regex.Replace(s, app.searchFor, app.ReplaceMatchCase, RegexOptions.IgnoreCase);

   Console.WriteLine(s);

   // Output: Many peaks are behind many clouds today.

 

   // Replace all occurrences of one char with another.

   s = s.Replace(' ', '_');

   Console.WriteLine(s);

   // Output: Many_peaks_are_behind_many_clouds_today.

 

   // Remove a substring from the middle of the string.

   string temp = "many_";

   int i = s.IndexOf(temp);

   if (i >= 0)

   {

       s = s.Remove(i, temp.Length);

   }

    Console.WriteLine(s);

   // Output: Many_peaks_are_behind_clouds_today.

 

   // Remove trailing and leading whitespace.

   // See also the TrimStart and TrimEnd methods.

   string s2 = " I'm wider than I need to be. ";

  // Store the results in a new string variable.

   temp = s2.Trim();

   Console.WriteLine(temp);

   // Output: I'm wider than I need to be.

 

   // Keep the console window open in debug mode.

   Console.WriteLine("Press any key to exit");

   Console.ReadKey();

}

 

// Custom match method called by Regex.Replace

// using System.Text.RegularExpressions

string ReplaceMatchCase(Match m)

{

   // Test whether the match is capitalized

   if (Char.IsUpper(m.Value[0]) == true)

   {

       // Capitalize the replacement string

       // using System.Text;

       StringBuilder sb = new StringBuilder(replaceWith);

       sb[0] = (Char.ToUpper(sb[0]));

       return sb.ToString();

    }

   else

   {

       return replaceWith;

   }

}

}

Для доступа к отдельным символам в строке с помощью нотаций массива можно использовать объект StringBuilder, перегружающий оператор [] для предоставления доступа к его внутреннему буферу символов. Также можно преобразовать строку в массив символов с помощью метода ToCharArray. В следующем примере используется ToCharArray для создания массива. Затем некоторые элементы массива изменяются. Конструктор строк, принимающий массив символов в качестве входного параметра, затем вызывается для создания новой строки.

Язык C#

 

Копировать код

class ModifyStrings

{

static void Main()

{

   string str = "The quick brown fox jumped over the fence";

   System.Console.WriteLine(str);

 

   char[] chars = str.ToCharArray();

   int animalIndex = str.IndexOf("fox");

   if (animalIndex != -1)

   {

       chars[animalIndex++] = 'c';

       chars[animalIndex++] = 'a';

       chars[animalIndex] = 't';

   }

 

   string str2 = new string(chars);

   System.Console.WriteLine(str2);

 

   // Keep the console window open in debug mode

   System.Console.WriteLine("Press any key to exit.");

   System.Console.ReadKey();

}

}

/* Output:

The quick brown fox jumped over the fence

The quick brown cat jumped over the fence

*/

Следующий пример предоставлен для тех редких случаев, в которых может понадобиться изменить строку на месте с помощью небезопасного кода аналогично массивам символов стиля C. В примере показан доступ к отдельным символам "на месте" с помощью фиксированного ключевого слова. Также в нем показано одно возможное побочное действие небезопасных операций со строками, которое является результатом внутреннего хранения (интернирования) компилятором C# строк. В общем, использовать этот метод следует только в тех случаях, когда это совершенно необходимо.

 










Последнее изменение этой страницы: 2018-06-01; просмотров: 177.

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