Доступ к отдельным символам в строке.
Работа со строками
Класс string (System.String)содержит множество полезных методов, позволяющих, например:
• Конкатенировать две и более строк
• Сравнить две строки
• Обратиться к отдельным символам или подстрокам заданной строки
• Вставить часть одной строки в другую
• Скопировать строку
• Определить число символов в строке
Для использования этих методов требуется определенная система идентификации отдельных символов и подстрок в строке. Предположим, например, что нужно скопировать подстроку "is" следующей строки:
"This is string"
Для решения такой задачи в классе stringприменяется целочисленный индекс, отсчитываемый от 0, а не от 1 (рис. 1.). Очевидно, что он нумерует все символы, включая пробелы и знаки пунктуации.
T | H | I | S | I | S | S | T | R | I | N | G |
Чтобы обратиться к подстроке "is",необходимо написать команду со следующим смыслом: "прочесть 2 символа, начиная с позиции 5". В строке 3 следующего фрагмента показано, как это делается в С#:
string andString;
string myString = "This is string";
andString = myString.SubString(5, 2);
Здесь применяется метод Substringкласса string.Он копирует "is"из myString в andString.Таким образом, выражение myString.SubString(5, 2)указывает программе возвратить подстроку строки myString,начинающуюся в позиции 5 и содержащую 2 символа.
Предположим, что нам необходимо проанализировать некоторый текст и вычислить сколько в этом тексте содержится символов и слов. Для этого нам необходимо понять каким образом можно определять слово в тексте. Легко догадаться, что количество слов равно количеству пробелов плюс один. Тогда возникает другой вопрос, как определить пробел. Для этого в языке С# существует специальный статический метод:
char.IsWhiteSpace(ch)
Здесь ch это анализируемый символ.
Создадим программу, которая выводит количество символов в тексте, а также количество слов в тексте.
using System;
class TextAnalyzer
{
public static void Main()
{
string myText;
int numWhitespaceChars = 0;
int numWords = 0;
char ch;
int index = 0;
Console.WriteLine("Please enter text:");
myText = Console.ReadLine();
myText = myText.ToUpper();
while(index < myText.Length)
{
ch = myText[index];
if(char.IsWhiteSpace(ch))
numWhitespaceChars++;
index++;
}
numWords = numWhitespaceChars + 1 ;
Console.WriteLine("Text analysis:");
Console.WriteLine("Number of symbols: {0:N0}", index);
Console.WriteLine("Number of words: {0:N0}", numWords);
Console.ReadLine();
}
}
Другие методы необходимые для анализа текста
char.lsLetter(ch) – определяет является ли текущий символ буквой.
char.IsDigit(ch) – определяет является ли текущий символ цифрой.