Студопедия

КАТЕГОРИИ:

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

Создание объекта StringBuilder




Прежде чем начать работать со строкой типа StringBuilder, необходимо создать объект типа StringBuilder. Для этого существует несколько вариантов:

1)Пустая строка:

StringBuilder sb = new StringBuilder();

2)Строке можно задать начальную длину — здесь строке sb будет выделена память под n элементов:

int n = 50;

StringBuilder sb = new StringBuilder(n);

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

3)Строка может получить начальное значение:

StringBuilder sb = new StringBuilder("qwerty");

Консольный ввод-вывод

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

StringBuilder sb = new StringBuilder(Console.ReadLine());

Console.WriteLine(sb);

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

При работе со строкой типа StringBuilder можно непосредственно обращаться к отдельным элементам этой строки, можно их изменять, при этом память для строки заново не выделяется. Индексы в строке начинаются с 0, т.е. как в обычном массиве. Текущая длина строки хранится в свойстве Length.

Пример. Инвертировать строку, заданную с клавиатуры.

Вот фрагмент программы, которая реализует данную задачу:

      StringBuilder sb = new StringBuilder(Console.ReadLine());

       char c;

       for (int i = 0, j = sb.Length - 1; i < j; i++, j--)

       {

           c = sb[i];

           sb[i] = sb[j];

           sb[j] = c;

       }

       Console.WriteLine(sb);

Результат

:

Свойства и методы класса StringBuilder

Этот класс имеет достаточно большое количество свойств и методов, аналогичных свойствам и методам для строк string, хотя, надо признать, что для класса StringBuilderих меньше, чем для типа string.

Среди свойств необходимо отметить два наиболее важных:

· Length — текущее количество символов, хранящихся в строке;

· Capacity — максимальное количество символов, которое может храниться в объекте , т.е. для текущего объекта выделена память именно под это количество символов.

Теперь рассмотрим наиболее употребительные методы класса StringBuilder. Обратите внимание на тот факт, что при вызове методов, например: Append(), Insert(),Remove(), Replace() для объекта типа StringBuilder полученный результат сохраняется в текущем объекте. Память для этого объекта будет выделяться заново только в том случае, если текущее количество символов (Length) превысит максимальное (Capacity).

1)Добавление строки к объекту — метод Append() используется для добавления некоего объекта в конец объекта StringBuilder. Рассмотрим хотя бы два примера:

а)добавление строки:

StringBuilder sb = new StringBuilder("qwerty");

sb.Append("++");

Console.WriteLine(sb);

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

qwerty++

б)добавление числа (оно автоматически преобразуется в строку):

StringBuilder sb = new StringBuilder("qwerty");

sb.Append(12.5);

Console.WriteLine(sb);

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

Qwerty12,5

2)Вставка — в заданную позицию (3) объекта sb вставим две копии строки "357":

StringBuilder sb = new StringBuilder("qwerty");

sb.Insert(3,"357",2);

Результат такой операции:

Qwe357357rty

3)Удаление — из объекта sb, начиная с указанной позиции (1), удаляем требуемое количество символов (2):

StringBuilder sb = new StringBuilder("qwerty");

sb.Remove(1,2);

В результате получим:

Qrty

4)Замена — все вхождения искомой строки ("we") заменяет на новое значение ("ABC"):

StringBuilder sb = new StringBuilder("qwerty_qwerty");

sb.Replace("we","ABC");

В результате замены имеем строку:

QABCrty_qABCrty

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

StringBuilder sb = new StringBuilder("qwerty_qwerty");

sb.Replace('w','A');

В этом случае результат будет таким:

QAerty_qAerty

5)Преобразование объекта типа StringBuilder в строку класса String:

string s = sb.ToString();

 

Пример 1. Дана символьная строка, содержащая хотя бы один символ '?' (вопросительный знак). Удалить все символы '!' (восклицательный знак) или '.' (точка), расположенные до первого символа '?' и заменить все пробелы, расположенные за первым символом '?', на символ подчёркивания '_'.

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

using System;

using System.Text;

Namespace Prim_StringBuilder

{

Class Program

{

public static void Main(string[] args)

{

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

string s = Console.ReadLine();

int k = s.IndexOf('?');

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

StringBuilder b1 = new StringBuilder(s.Substring(0, k));

Console.WriteLine(b1);

StringBuilder b2 = new StringBuilder(s.Substring(k));

Console.WriteLine(b2);

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

{

if(b1[i] == '!' || b1[i] == '.')

{

b1.Remove(i, 1);

i--;

}

}

b2.Replace(' ', '_');

s = b1.ToString() + b2.ToString();

Console.WriteLine("Результат:\n"+s);

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

Console.ReadKey(true);

}

}

}

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

Исходная строка:

1a!2.3!!.. 4.!.?6 7! ..?

k=15

1a!2.3!!.. 4.!.

?6 7! ..?

Результат:

1a23 4?6_7!_..?

Press any key to continue . . .

 










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

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