
- •3. Строки
- •3.1. Класс System.String
- •3.1.1. Форматирование и синтаксический анализ
- •If (Char.IsPunctuation(s1[I]) | Char.IsWhiteSpace(s1[I]))
- •3.1.2. Доступ к отдельным элементам строки
- •3.1.3. Смена регистра в строке
- •3.1.4. Объединение нескольких строк
- •3.1.5. Разделение строк на подстроки
- •3.2. Класс System.Text.StringBuilder
- •3.3. Структура System.Char
3.1.4. Объединение нескольких строк
Пример 3.5. Использование операторов "+" и "+=" для однократной конкатенации строк.
public class Example4
{ public static void Main()
{ string userName = "Александр";
string date = System.DateTime.Today.ToShortDateString();
string str = "Привет " + userName + ". Сегодня " + date + ".";
System.Console.WriteLine(str);
// Вывод: Привет Александр. Сегодня 15.10.2011.
str += " Как дела?";
System.Console.WriteLine(str);
// Вывод: Привет Александр. Сегодня 15.10.2011. Как дела?
System.Console.ReadLine();
}
}
Пример 3.6. Использование методов Append и AppendLine класса System.Text.StringBuilder для объединения строк без снижения производительности за счет многократного использования оператора "+".
class StringBuilderTest
{ static void Main()
{ // Использование строк StringBuilder для их конкатенации
// в циклах с большим числом повторений
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 1; i <= 100; i++)
{ sb.Append(" ").Append(i.ToString());
if ((i % 10) == 0) sb.AppendLine();
}
System.Console.WriteLine(sb.ToString());
System.Console.ReadLine();
}
}
/* Вывод:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
*/
3.1.5. Разделение строк на подстроки
Пример 3.7. Демонстрация разбора строки с помощью метода Split класса System.String.
class TestStringSplit
{ static void Main()
{ char[] delimiterChars = { ' ', ',', '.', ':', ';', '\t' };
string text = "один\tдва три:четыре,пять;шесть.семь";
System.Console.WriteLine("Исходный текст: '{0}'", text);
string[] words = text.Split(delimiterChars);
System.Console.WriteLine("В этом тексте {0} слов:",
words.Length);
foreach (string s in words)
System.Console.WriteLine(s);
System.Console.ReadLine();
}
}
/* Вывод:
Исходный текст: 'один два три:четыре,пять;шесть.семь'
В этом тексте 7 слов:
один
два
три
четыре
пять
шесть
семь
*/
3.2. Класс System.Text.StringBuilder
(http://msdn.microsoft.com/ru-ru/library/system.text.stringbuilder.aspx)
Явное использование оператора new для объявления строк StringBuilder:
System.Text.StringBuilder sb = new
System.Text.StringBuilder("Иран – азиатская страна");
sb[3] = 'к';
System.Console.WriteLine(sb.ToString());
// Вывод: Ирак – азиатская страна
Выделение строке (StringBuilder) нужного объема памяти:
System.Text.StringBulder sb1 = new System.Text.StringBuilder(128);
System.Text.StringBulder sb2 = new
System.Text.StringBuilder("abcdef", 16);
Таблица 3.2. Основные свойства и методы класса System.Text.StringBuilder
Имя |
Описание |
Свойства |
|
Capacity |
Возвращает или задает максимальное число знаков, которое может содержаться в памяти, назначенной текущей строке StringBuilder. |
Chars[i] |
Возвращает или задает символ на указанной позиции (i) в текущей строке StringBuilder. |
Length |
Возвращает или задает длину текущей строки StringBuilder. |
MaxCapacity |
Возвращает максимальную емкость текущей строки StringBuilder (определяется значением Int32.MaxValue). |
Методы |
|
Append(V); |
Добавляет к текущей строке строковое представление указанного значения любого типа (V). |
Append(ch); Append(ch,n); |
Добавляет к текущей строке строковое представление указанного символа Unicode (ch) или заданное число его копий (n). |
Append(arrCh[]); Append(arrCh[],i,L); |
Добавляет к текущей строке строковое представление всех символов Unicode из указанного массива (arrCh) или L его элементов, начиная с i-го. |
Append(s); Append(s,i,L); |
Добавляет к текущей строке копию указанной строки (s, типа String) или подстроки, начиная с i-го индекса и длиной L знаков. |
AppendFormat(sf,v1); AppendFormat(sf,v1,v2); AppendFormat(sf,v1,v2,v3); AppendFormat(sf,arrV[]); |
Добавляет к текущей строке строковое представление одного, двух или трех указанных объектов (v1, v2, v3), либо элементов массива (arrV), выполненное в соответствии с элементами формата (см. п.4.2) в указанной строке (sf). |
AppendLine(); AppendLine(s); |
Добавляет копию указанной строки (s, типа String) и знак завершения строки в конец текущей строки. |
Clear(); |
Удаляет все символы из текущей строки (аналогичен ука-занию 0 (ноля) в свойстве Length строки StringBuilder). |
CopyTo(i1,arrCh[],i2,L); |
Копирует заданное число символов (L) из текущей строки, начиная с указанной позиции (i1), и вставляет в массив символов (arrCh), начиная с i2-элемента (заменяя их). |
EnsureCapacity(n); |
Устанавливает максимальную емкость текущей строки (StringBuilder) не меньше указанного значения (n). |
Insert(i,V); |
Вставляет в текущую строку, начиная с i-ой позиции, стро-ковое представление указанного значения любого типа (V). |
Insert(i,ch); |
Вставляет в текущую строку, начиная с i-ой позиции, строковое представление указанного символа Unicode (ch). |
Insert(i,arrCh[]); Insert(i,arrCh[],i2,L); |
Вставляет в текущую строку, начиная с i-ой позиции, стро-ковое представление всех символов Unicode из указанного массива (arrCh) или L его элементов, начиная с i2-го. |
Insert(i,s); Insert(i,s,n); |
Вставляет в текущую строку, начиная с i-ой позиции, одну или n копий указанной строки (s, типа String). |
Remove(i,L); |
Удаляет указанный диапазон символов (L знаков, начиная с i-го) из текущей строки. |
Replace(ch1,ch2); Replace(ch1,ch2,i,L); |
Замещает в текущей строке или подстроке (L знаков, начиная с i-го) все вхождения указанного символа (ch1) на другой указанный символ (ch2). |
Replace(s1,s2); Replace(s1,s2,i,L); |
Замещает в текущей строке или подстроке (L знаков, начиная с i-го) все вхождения указанной строки (s1) на другую указанную строку (s2). |
ToString(); ToString(i,L); |
Преобразует к типу String значение текущей строки или подстроки (L знаков, начиная с i-го). |
Пример3.8. Использование свойств Capacity, MaxCapacity и Length, а также методов EnsureCapacity, ToString.
using System;
using System.Text;
class Sample
{ public static void Main()
{ StringBuilder sb1 = new StringBuilder("abc");
StringBuilder sb2 = new StringBuilder("abc", 16);
Console.WriteLine("a1) sb1.Length = {0}, sb1.Capacity = {1}",
sb1.Length, sb1.Capacity);
Console.WriteLine("a2) sb2.Length = {0}, sb2.Capacity = {1}",
sb2.Length, sb2.Capacity);
Console.WriteLine("a3) sb1.ToString() = \"{0}\", " +
"sb2.ToString() = \"{1}\"",
sb1.ToString(), sb2.ToString());
Console.WriteLine("a4) sb1.MaxCapacity = {0}, " +
"sb2.MaxCapacity = {1}",
sb1.MaxCapacity, sb2.MaxCapacity);
sb1.EnsureCapacity(50);
Console.WriteLine("\nМаксимально допустимое число знаков " +
"в строке sb1 увеличено до 50.");
Console.WriteLine("b1) sb1.Length = {0}, sb1.Capacity = {1}",
sb1.Length, sb1.Capacity);
Console.WriteLine("b2) sb2.Length = {0}, sb2.Capacity = {1}",
sb2.Length, sb2.Capacity);
Console.WriteLine("b3) sb1.ToString() = \"{0}\", " +
"sb2.ToString() = \"{1}\"",
sb1.ToString(), sb2.ToString());
sb1.Length = 0;
Console.WriteLine("\nУстановка длины строки sb1 в 0.");
sb2.Capacity = 51;
Console.WriteLine("Максимально допустимое число знаков " +
"в строке sb2 увеличено до 51.");
Console.WriteLine("c1) sb1.Length = {0}, sb1.Capacity = {1}",
sb1.Length, sb1.Capacity);
Console.WriteLine("c2) sb2.Length = {0}, sb2.Capacity = {1}",
sb2.Length, sb2.Capacity);
Console.WriteLine("c3) sb1.ToString() = \"{0}\", " +
"sb2.ToString() = \"{1}\"",
sb1.ToString(), sb2.ToString());
Console.ReadLine();
}
}
/* Вывод:
a1) sb1.Length = 3, sb1.Capacity = 16
a2) sb2.Length = 3, sb2.Capacity = 16
a3) sb1.ToString() = "abc", sb2.ToString() = "abc"
a4) sb1.MaxCapacity = 2147483647, sb2.MaxCapacity = 2147483647
Максимально допустимое число знаков в строке sb1 увеличено до 50.
b1) sb1.Length = 3, sb1.Capacity = 50
b2) sb2.Length = 3, sb2.Capacity = 16
b3) sb1.ToString() = "abc", sb2.ToString() = "abc"
Установка длины строки sb1 в 0.
Максимально допустимое число знаков в строке sb2 увеличено до 51.
c1) sb1.Length = 0, sb1.Capacity = 50
c2) sb2.Length = 3, sb2.Capacity = 51
c3) sb1.ToString() = "", sb2.ToString() = "abc"
*/
Пример 3.9. Использование методов Append, AppendFormat, Insert и Replace класса StringBuilder для изменения значения строки.
using System;
using System.Text;
public sealed class App
{ static void Main()
{ // Создание строки StringBuilder максимальной емкостью
// до 50-ти символов и ее инициализация значением "ABC".
StringBuilder sb = new StringBuilder("ABC", 50);
// Добавление 3-х символов в конец строки StringBuilder.
sb.Append(new char[] { 'D', 'E', 'F' });
// Добавление строки формата в конец строки StringBuilder.
sb.AppendFormat("GHI{0}{1}", 'J', 'k');
// Вывод длины строки StringBuilder и ее содержимого.
Console.WriteLine("{0} симв.: {1}", sb.Length, sb.ToString());
// Вставка подстроки в самое начало строки StringBuilder.
sb.Insert(0, "Алфавит: ");
// Замена всех вхождений символа "k" символом "K".
sb.Replace('k', 'K');
// Вывод длины строки StringBuilder и ее содержимого.
Console.WriteLine("{0} симв.: {1}", sb.Length, sb.ToString());
}
}
// Вывод:
// 11 симв.: ABCDEFGHIJk
// 21 симв.: Алфавит: ABCDEFGHIJK