Студопедия

КАТЕГОРИИ:

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

Обращение к отдельным элементам строки




Работа со строками

Обработка текстовых строк является одной из важнейших задач на современных компьютерах. В языке C# имеются развитые средства по обработке строк. Ранее мы частично рассматривали работу со строками. Здесь разберёмся с этим вопросом более подробно.

Строки в Си-шарп – это объекты класса String, значением которых является текст. Для работы со строками в этом классе определено множество методов (функций) и в этом уроке мы рассмотрим некоторые из них.

Чтобы использовать строку, ее нужно сначала создать – присвоить какое-либо значение, иначе мы получим ошибку: "Использование локальной переменной "[имя переменной]", которой не присвоено значение". Объявим простую строку и выведем ее на экран:

Для хранения символьной информации в языке C# используется Unicode. Под один символ отводится 16 бит. Строка в C# представляет собой цепочку символов Unicodeи является объектом класса System.String.

Создание строки

1)Строку с именем s можно создать так:

string s="Это строка";

2)Строка может содержать различные управляющие символы, например, символ перехода на новую строку '\n':

       string s1 = "Текст выводится \n в две строки";

       Console.WriteLine(s1);

3)Можно создавать строки с посимвольным соответствием — в этом случае управляющие символы в таких строках становятся обычными символами. Запишем перед строкой символ '@' (Эт-коммерческое).

       string s1 = @"Текст выводится \n в две строки";

       Console.WriteLine(s1);

Здесь строка выведется на печать «как есть»:

4)Если имеется массив символов Unicode типа char, то его можно преобразовать в строку. Для этого используется конструктор класса String():

char []c={'A','B','C','D','E','F'};

string s=new String(c);

Сейчас в s хранится строка:

ABCDEF

5)Но можно построить новую строку не из всего массива типа char, а из его части:

char []c={'A','B','C','D','E','F'};

int i=2, k=3;

s=new String(c, i, k);

В этом случае строка строится не из всего массива c, а начиная с элемента под номером i, и используется k символов. Вывод строки s на экран даёт следующее:

CDE

6)Можно создать строку, в которой будет многократно повторяться один и тот же символ:

string s=new String('*', 10);

Получится строка из 10 символов «звёздочка».

Замечание.

string s = new String("*", 10);

работать не будет ("*" — это строка, а '*' — это символ).

Консольный ввод-вывод строк

Выполняется просто. Достаточно использовать стандартные методы ReadLine() и WriteLine() класса Console:

string s;

Console.WriteLine("Задайте строку:");

s=Console.ReadLine();

Console.WriteLine("s="+s);

Обращение к отдельным элементам строки

Если в строке имеется какая-либо информация, то можно эту строку обрабатывать посимвольно как массив. Индексы в строке так же начинаются с 0. Текущая длина определяется свойством Length:

  int k = 0;

  string s = "Код Уфы 347, 7 цифр в номере телефона";

  for (int i = 0; i < s.Length; i++)

      if (s[i] >= '0' && s[i] <= '9')

          k++;

  Console.WriteLine("В строке: {0} \n число цифр k={1}", s, k);

На экран будет выведено количество цифр, найденных в этой строке. Здесь к элементу строки используется доступ по чтению.

Если мы попробуем заменить все символы '2' на '5':

for(int i = 0; i < s.Length; i++)

if(s[i] == '2')

s[i] = '5';

Console.WriteLine("s="+s);

В этом случае для строки

s[i] = '5';

будет выдано сообщение об ошибке:

Невозможно присвоить значение свойству или индексатору 'string.this[int]' -- доступ только для чтения (CS0200)

Решить проблему можно двумя путями:

1) использовать методы класса String (для замены подойдёт метод Replace());

2) вместо класса String использовать класс StringBuilder, для которого допустимо изменение отдельных элементов строки (как в массиве).

Операции над строками

Для строк допустимы операция присваивания, сцепление строк (в конец первой строки добавляется вторая) и проверка на равенство или неравенство. Другие операции не допустимы.

1)Сцепление (слияние) строк:

       string s1 = "Слияние_", s2 = "строк";

       string s;

       s = s1 + s2;

       Console.WriteLine(s);

       Console.ReadKey();

На экран будет выведено:

2)Проверка на равенство (==) или на неравенство (!=):

       string s1 = "122", s2 = "123";

       if (s1 == s2)

           Console.WriteLine("Равны");

       else

           Console.WriteLine("Неравны");

       Console.ReadKey();

Здесь будет напечатано:

Методы по обработке строк

Для строк в языке C# существует большое количество готовых методов, позволяющие выполнять различные действия над строками. Рассмотрим наиболее употребительные из них.

1)Конкатенация (сцепление, слияние) строк — используется статический метод Concat():

       string s = "123", s1 = "45", s2 = "678";

       s = String.Concat(s, s1, s2);

       Console.WriteLine(s);

Результатом будет строка, содержащая обе исходные строки:

Интересно применение метода Concat() для объединения массива строк:

       string[] x = { "Один ", "Два ", "Три" };

       string s = String.Concat(x);

       Console.WriteLine(s);

Результатом будет строка:

2)Копированиестроки выполняется с помощью статического метода Copy():

string s2 = String.Copy(s);

Тоже самое можно получить и с помощью оператора присваивания:

s2=s;

3)Получение подстроки— используется метод Substring(), например:

        string s, s2;

       s = "Программирование";

        s2 = s.Substring(7, 3);

       Console.WriteLine(s2);

Здесь из исходной строки s, начиная с позиции 7(считаем с 0), копируется 3 символа и полученный результат заносится в строку s2. На экране будет выведено:

4)Вставка подстроки — в заданную позицию (2) исходной строки sвключаем подстроку ("AB"):

       string s, s2;

       s = "Вставка в строку";

       s2 = s.Insert(8, "ПОДСТРОКИ ");

       Console.WriteLine(s2);

Результатом будет строка s2, равная:

5)Замена символов и строк — используется метод Replace(). Имеется два варианта. Рассмотрим их оба.

а)Замена символов.

Заменим в строке sвсе вхождения символа '2'на '5':

       string s = "123422";

       Console.WriteLine(s);

       string s1 = s.Replace('2', '5');

       Console.WriteLine(s1);

Полученный результат:

Как видим, рассматриваемая ранее задача (попытка замены s[i]='5') при использовании метода Replace() решается предельно просто.

б)Замена строк.

Заменим все слова " первоначальная " на " другая":

       string s = "Это первоначальная строка";

       Console.WriteLine(s);

       string s1 = s.Replace("первоначальная", "другая");

       Console.WriteLine(s1);

Полученный результат:

Метод Replace() работает корректно даже тогда, когда делается замена на строку, которая является расширением исходной. Например, заменим в тексте все вхождения слова "child" на "children":

       string s = "child_child_child";

       Console.WriteLine(s);

       string s1 = s.Replace("child", "children");

       Console.WriteLine(s1);

Как видно из выведенного на экран текста, всё получилось так, как и ожидалось:

6)Удаление символов из строки (метод Remove()) — в строке s удаляем k символов, начиная с позиции i:

       string s = "Удаляем подстроку из строки";

       Console.WriteLine(s);

       int i = 8, k = 10;

       string s1 = s.Remove(i, k);

       Console.WriteLine(s1);

Полученный результат:

Метод Remove() может применяться обрезания строки, тогда указывается один аргумент – позиция, начиная с которой обрезается строка

string s = "Hello, World";

Console.WriteLine(s.Remove(5));

7)Поиск индекса первого вхождения символа в строке (метод IndexOf()):

       string s = "It is false";

       int i = s.IndexOf('f');

       Console.WriteLine("i={0}", i);

Полученный результат (позиция символа 'f'):

8)Поиск первого вхождения любого из символов массива в строке (метод IndexOfAny()) — в строке s ищется позиция первого вхождения любого из символов массива x:

string s = "От А до Я зная материал, легко получить пятерку";

char[] x = { 'А', 'Я' };

int i = s.IndexOfAny(x);

Console.WriteLine("i={0}", i);

Полученный результат (позиция символа '{'):

i=3

9)Поиск индекса последнего вхождения символа в строке (метод LastIndexOf()):

string s = "От А до Я зная материал, легко получить пятерку";

int i = s.LastIndexOf('а');

Console.WriteLine("i={0}", i);

Полученный результат:

i=21

10)Поиск последнего вхождения любого из символов массива в строке — в строке s ищется позиция последнего вхождения любого из символов массива x (методLastIndexOfAny()):

string s = "От А до Я зная материал, легко получить пятерку";

char[] x = { 'а', 'я' };

int i = s.LastIndexOfAny(x);

Console.WriteLine("i={0}", i);

Полученный результат:

i=41

11) Проверка на вхождение подстроки в строку – используется метод Contains(). Данный метод принимает один аргумент – подстроку. Возвращает True, если строка содержит подстроку, в противном случае – False. Пример:

       string s = "Hello, World";

       if (s.Contains("Hello"))

          Console.WriteLine("Содержит");

 

13) Метод IndexOf() возвращает индекс первого символа подстроки, которую содержит строка. Данный метод принимает один аргумент – подстроку. Если строка не содержит подстроки, метод возвращает "-1".

Пример:

       string s = "Hello, World";

        Console.WriteLine(s.IndexOf("H")); // 0

       Console.WriteLine(s.IndexOf("World")); // 7

       Console.WriteLine(s.IndexOf("Zoo")); // -1

14) Чтобы узнать, начинается/заканчивается ли строка указанной подстрокой, используются методы StartsWith() и EndsWith(), которые возвращают логическое значение.

Пример:

       string s = "Hello, World";

       Console.WriteLine(s.StartsWith("Hello")); // True

       Console.WriteLine(s.StartsWith("World")); // False

       Console.WriteLine(s.EndsWith("World")); // True

 

15) Перевести строку в верхний/нижний регистр можно при помощи методов ToUpper() и ToLower():

       string s = "Hello, World";

       Console.WriteLine(s);

       Console.WriteLine(s.ToUpper()); // выводит "HELLO, WORLD"

       Console.WriteLine(s.ToLower()); // выводит "hello, world"

 

16) Метод ToCharArray() преобразует строку в массив символов:

       string s = "Массив";

       char[] array = s.ToCharArray();

       for (int i = 0; i < s.Length; i++)

           Console.WriteLine(s[i]);

Результат:

 

17) Метод Split() разбивает строку по указанному символу на массив подстрок, один аргумент - символ, по которому будет разбита строка.

       string s = "Строка, преобразуется, в, массив, слов";

       string[] slovo = s.Split(',');

       for (int i = 0; i < slovo.Length; i++)

           Console.WriteLine(slovo[i]);

Пример 1.

Дана символьная строка s, известно, что в этой строке есть хотя бы один символ «точка». Преобразовать строку, удалив из неё запятые, предшествующие первой точке, и заменив знаком * все символы пробела, встречающиеся после первой точки.

Возможная реализация:

string s = "Уберем, удалим, изничтожим запятые. Потом заменим пробел подчеркиванием.";

Console.WriteLine("Исходная строка:\n" + s);

int k = s.IndexOf(".");

Console.WriteLine("Первая точка находится в позиции: " + k);

string s1 = s.Substring(0, k);

Console.WriteLine(s1);

int i;

do

{

i = s1.IndexOf(',');

if (i >= 0)

 s1 = s1.Remove(i, 1);

}

while (i >= 0);

Console.WriteLine(s1);

string s2 = s.Substring(k);

Console.WriteLine(s2);

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

Console.WriteLine(s2);

s = s1 + s2;

Console.WriteLine("Результирующая строка:\n" + s);

Console.Write("Press any key to continue . . . ");

Console.ReadKey(true);

Результат работы:

Строки StringBuilder

Кроме обычных строк (тип string) в языке C# существует ещё один вид строк — StringBuilder. Для символов, хранящихся в строках StringBuilder, также используется Unicode. Принципиальное отличие строки StringBuilder от строки string заключается в том, что элементы строки StringBuilder можно изменять напрямую, при этом такая строка заново не создаётся.

Для работы со строками StringBuilder необходимо подключить дополнительное пространство имён:

using System.Text;










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

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