Строки и регулярные выражения

advertisement
1)
string message1 = "Hello";
// возвращает "Hello"
message1 += ", There";
// возвращает "Hello, There"
string message2 = message1 + "!";
// возвращает "Hello, There!“
2)
string message = "Hello";
char char4 = message[4]; // возвращает 'o';
3)
string greetingText = "Hello from all the guys at Wrox Press. ";
greetingText +=
"We do hope you enjoy this book as much as we enjoyed writing it.";
4)
string greetingText = “Hello from all the guys at Wrox Press. “
greetingText +=
"We do hope you enjoy this book as much as we enjoyed writing it.";
for(int i = 'z'; i>='a' ; i--)
{
char old1 = (char)i;
char new1 = (char) (i+1) ;
greetingText = greetingText.Replace(old1, new1);
}
Метод
IndexOf
IndexOfAny
Назначение
Сравнивает содержимое строк, принимая во внимание культуру (локаль) при
определении эквивалентности определенных символов.
То же, что и Compare, но без учета локальных установок.
Комбинирует отдельные экземпляры строк в одну строку (конкатенация)
Копирует определенное число символов, начиная с определенной позиции, в новый
экземпляр массива.
Формирует строку, содержащую различные значения, и указывает, каким образом
каждое из них должно быть отформатировано.
Находит первое вхождение заданной подстроки или символа в строке.
Находит первое вхождение в строку любого символа из набора.
Insert
Вставляет экземпляр строки в другой экземпляр строки в определенную позицию.
Join
LastIndexOf
LastIndexOfAny
PadLeft
PadRight
Строит новую строку, комбинируя содержимое массива строк.
То же, что и IndexOf, но находит последнее вхождение.
То же, что и IndexOfAny, но находит последнее вхождение.
Дополняет строку до заданной длины повторяющимся символом слева.
Дополняет строку до заданной длины повторяющимся символом справа.
Заменяет вхождения определенного символа или подстроки другим символом или
подстрокой.
Разбивает строку на массив подстрок, используя в качестве разделителя заданный
символ.
Извлекает подстроку, начиная с определенной позиции строки.
Преобразует символы строки в нижний регистр.
Преобразует символы строки в верхний регистр.
Удаляет ведущие и хвостовые пробелы.
Compare
CompareOrdinal
Concat
CopyTo
Format
Replace
Split
Substring
ToLower
ToUpper
Trim
for(int i = ‘Z’; i>=’A’; i--)
{
char old1 = (char)i;
char new1 = (char) (i+1);
greetingText = greetingText.Replace(old1, new1);
}
Console.WriteLine("Зашифрованная строка:\n" + greetingText);
5)
StringBuilder greetingBuilder =
New StringBuilder("Hello from all the guys at Wrox Press. ", 150);
greetingBuilder.AppendFormat (
"We do hope you enjoy this book as much as we enjoyed writing it");
6)
Рисунок 9.1  Объект StringBuilder
7)
StringBuilder greetingBuilder =
new StringBuilder("Hello from all the guys at Wrox Press. ",150);
greetingBuilder.AppendFormat(
"We do hope you enjoy this book as much as we enjoyed writing it");
Console.WriteLine("Незашифрованная строка:\n" + greetingBuilder);
for(int i = 'z'; i>='a' ; i--)
{
char old1 = (char)i;
char new1 = (char) (i+1);
greetingBuilder = greetingBuilder.Replace(old1, new1);
}
for (int i = 'Z'; i>='A' ; i--)
{
char old1 = (char)i;
char new1 = (char) (i+1);
greetingBuilder = greetingBuilder.Replace(old1, new1);
}
Console.WriteLine("Зашифрованная строка:\n" +
greetingBuilder.ToString()) ;
StringBuilder sb = new StringBuilder("Hello");
StringBuilder sb = new StringBuilder(20);
8)
//Здесь устанавливается начальная емкость 100, но максимальная - 500.
//Таким образом, этот StringBuilder не может вырасти более чем до 500
IIсимволов, в противном случае будет сгенерировано исключение.
StringBuilder sb = new StringBuilder(100, 500);
9)
StringBuilder sb = new StringBuilder("Hello");
sb.Capacity = 100;
10)
double d = 13.45;
int i = 45;
Console.WriteLine(
"Значение double равно {0,10:E}, a int содержит {1}", d, i);
11)
Console.WriteLine(
"Значение double равно {0,10:Е}, a int содержит {1}", d, i);
Метод
Append()
Назначение
Добавляет строку к текущей строке.
Добавляет строку, сформированную в соответствии со
AppendFormat()
спецификатором формата.
Insert()
Вставляет подстроку в строку.
Remove()
Удаляет символ из текущей строки.
Заменяет все вхождения символа другим символом или
Replace()
вхождения подстроки другой подстрокой.
Возвращает текущую строку в виде объекта System.String
ToString()
(переопределение метода класса System.Object).
СпециПрименяется к
фикатор
C
Числовым
типам
D
Только
к
целочисленны
м типам
E
Числовым
типам
F
Числовым
типам
G
Числовым
типам
N
Числовым
типам
P
X
Значение
Пример
Символ
местной $4834.50 (США)
валюты
4834.50 руб (Россия)
Обычное целое
4834
Экспоненциальная
4.834E+003
(научная) нотация
С
фиксированной 4834.50
десятичной точкой
Обычные числа
4834.5
Формат
числа, 4,384.50 (США)
принятый в данной 4 384,50 (Россия)
местности
Процентная нотация
432,000.00%
Числовым
типам
Только
к Шестнадцатеричный
целочисленны формат
м типам
0x1120
12)
// Возможная реализация Console.WriteLine()
public void WriteLine(string format, object arg0, object arg1)
{
this.WriteLine(string.Format(this.FormatProvider, format,
new object[](arg0, arg1}));
}
13)
interface IFormattable
{
string ToString(string format, IFormatProvider formatProvider);
}
14)
Console.WriteLine(
"Значение double равно {0,10:Е}, a int содержит (1)", d, i);
Рисунок 9.2  Пример выполнения форматирования
16)
struct Vector:IFormattable
{
public double x, y, z;
// Начальная часть Vector
17)
public string ToString(string format, IFormatProvider formatProvider) {
if(format == null)
{
return ToString();
}
string formatUpper = format.ToUpper();
switch (formatUpper)
{
case "N":
return "|| " + Norm().ToString() + " ||";
case "VE":
return String.Format("( {0:E}, {1:E}, {2:E} )", x, y, z);
case "IJK":
StringBuilder sb = new StringBuilder(x.ToString(),30);
sb.Append(" i + ");
sb.Append(y.ToString());
sb.Append(" j + ");
sb.Append(z.ToString());
sb.Append(" k");
return sb.ToString();
default:
return ToString();
}
}
18)
public override string ToString()
{
return " ( " + x + " , " + у + " , " + z + " )";
}
19)
public double Norm()
{
return x*x + y*y + z*z;
}
20)
static void Main()
{
Vector v1 = new Vector(1,32,5);
Vector v2 = new Vector(845.4, 54.3, -7.8);
Console.WriteLine(
"\nB формате IJK:\nvl будет {0, 30:IJK}\nv2 будет {1,30:IJK}",
v1, v2);
Console.WriteLine(
"\nВ формате по умолчанию:\nvl будет {0,30}\nv2 будет {1,30}",
v1, v2);
Console.WriteLine(
"\nB формате VE:\nvl будет (0,30:VE)\nv2 будет {1,30:VE}",
v1, v2);
Console.WriteLine(
"ХпНормы:\nдля vl норма {0, 20:М}\пдля v2 норма {1,20:N}",
v1, v2) ;
}
21)
FormattableVector
В формате IJK:
v1 будет
1 i + 32 j + 5 k
v2 будет
845.4 i + 54.3 j + -7.8 k
В формате по умолчанию:
v1 будет ( 1 , 32 , 5 )
v2 будет (845.4 , 54.3, -7.8)
В формате VE:
v1 будет ( 1.000000Е+000, 3.200000Е+001, 5.000000Е+000 )
v2 будет ( 8.454000Е+002, 5.430000Е+001, -7.800000Е+000 )
Нормы:
для vl норма
|| 1050 ||
для v2 норма || 717710.49 ||
22)
string Text =
@"This comprehensive compendium provides a broad and thorough
investigation of all aspects of programming with ASP.NET. Entirely revised
and updated for the fourth release of .NET,this book will give you the
information you need to master ASP.NET and build a dynamic, successful,
enterprise Web application.";
23)
const string pattern = "ion";
MatchCollection myMatches = Regex.Matches (myText, pattern,
RegexOptions.IgnoreCase |
RegexOptions.ExplicitCapture);
foreach (Match nextMatch in myMatches)
{
Console.WriteLine(nextMatch.Index);
}
Таблица 9.4. Перечисления RegexOptions
Имя члена
CultureInvariant
ExplicitCapture
IgnoreCase
IgnorePatternWhitespace
Multiline
RightToLeft
Singleline
Описание
Предписывает игнорировать национальные установки строки.
Модифицирует способ поиска соответствия, обеспечивая
только буквальное соответствие.
Игнорирует регистр символов во входной строке.
Удаляет из строки незащищенные управляющими символами
пробелы и разрешает комментарии, начинающиеся со знака
фунта или хеша.
Изменяет значения символов ^ и $ так, что они применяются к
началу и концу каждой строки, а не только к началу и концу
всего входного текста.
Предписывает читать входную строку справа налево вместо
направления по умолчанию – слево направо (что удобно для
некоторых азиатских и других языков, которые читаются в
таком направлении).
Специфицирует однострочный режим, в котором точка (.)
символизирует соответствие любому символу.
24)
const string pattern = "ion";
MatchCollection myMatches = Regex.Matches(myText, pattern,
RegexOptions.IgnoreCase |
RegexOptions.ExplicitCapture);
25) const string pattern = @"ion\b";
26) const string pattern = @"\ba\S*ion\b";
Таблица 9.5. Специальные символы, применяемые в регулярных выражениях
Символ Значение
^
Начало входного текста
Пример
^B
$
X$
.
*
+
?
\s
\S
\b
\B
Конец входного текста
Любой одиночный символ
кроме символа перевода
строки (\n)
Предыдущий символ может
повторяться 0 или более раз
Предыдущий символ может
повторяться 1 или более раз
Предыдущий символ может
повторяться 0 или 1 раз
Любой пробельный символ
Любой символ, не
являющийся пробелом
Граница слова
Любая позиция, кроме
границы слова
Соответствует
B, но только как первый символ текста
X, но только как последний символ
текста
i.ation
Isation, ization
ra*t
rt, rat, raat, raaat и т. д.
ra+t
rat, raat, raaat и т. д.
ra?t
только rt и rat
\s
[пробел]a, \ta, \na
\SF
aF, rF, cF
ion\b
Любое слово, заканчивающееся на ion
\BX\B
Любой символ X в середине слова
27)
static void WriteMatches(string text, MatchCollection matches)
{
Console.WriteLine("Исходный текст: \n\n" + text + "\n");
Console.WriteLine("Количество соответствий: " + matches.Count);
foreach (Match nextMatch in matches)
{
int index = nextMatch.Index;
string result = nextMatch.ToString();
int charsBefore = (index < 5) ? index : 5;
int fromEnd = text.Length – index - result.Length;
int charsAfter = (fromEnd < 5) ? fromEnd : 5;
int charsToDisplay = charsBefore + charsAfter + result.Length;
Console.WriteLine("Индекс: {0}, \tCTpoKa: {1}, \t{2}",
index, result, text.Substring(index-charsBefore,
charsToDisplay));
}
}
28)
static void Find2()
{
string text = @"This comprehensive compendium provides a broad and
thorough investigation of all aspects of programming with
ASP.NET. Entirely revised and updated for the 3.5 Release of
.NET, this book will give you the information you need to
master ASP.NET and build a dynamic, successful, enterprise Web
application.”;
string pattern = @"\ba";
MatchCollection matches = Regex.Matches(text, pattern,
RegexOptions.IgnoreCase);
WriteMatches(text, matches);
}
29) static void Main()
{
Find1();
Console.ReadLine();
}
30) using System;
using System.Text.RegularExpressions;
31)
RegularExpressionsPlayaround
Исходный текст:
This comprehensive compendium provides a broad and thorough
investigation of all aspects of programming with ASP.NET. Entirely
revised and updated for the 3.5 Release of .NET, this book will give you
the information you need to master ASP.NET and build a dynamic,
successful, enterprise Web application.
Количество соответствий: 1
Индекс: 291, Строка: application,
Web application.
<протокол>://<адрес>:<порт>
\b(\S+)://<[^:]+)<?::(\S+))?\b
Я только что нашел этот интереснейший URI на http:// как же его... ах, да!
http://www.wrox.com
Download