Foreach (char character in myString)
Лекция 6. Действия над строками.
До сих пор все наши операции над строками сводились к выводу строк на консоль, чтению строк с консоли и объединению строк посредством оператора +. В процессе программирования более сложных приложений вы очень скоро убедитесь, что значительная их часть предполагает различные манипуляции со строками. Начнем с того, что переменная типа string — это всего лишь массив переменных типа char, доступных в режиме "только чтение". Иными словами, мы можем получить доступ к отдельным символам строки следующим образом:
string myString = “A string”;
char myChar = myString [1] ;
Однако присваивать отдельные символы таким способом нельзя. Для получения массива, доступного для записи, следует воспользоваться приведенным ниже кодом. В нем используется команда ToCharArray () переменной типа массива:
string myString = "A string";
char[] myChars = myString.ToCharArray();
Теперь мы можем выполнять манипуляции с массивом типа char обычным путем. Строки могут использоваться и в циклах foreach:
{
Console.WriteLine(“{0}”, character);
}
Как и в случае других массивов имеется возможность узнать число элементов с помощью myString.Length. Таким же образом можно определить общее количество символов в строке:
string myString = Console.ReadLine () ;
Console.WriteLine("You typed {0} characters.", myString.Length);
Другим основополагающим способом работы со строками является использование команд в формате, аналогичном формату команды <string>.ToCharArray(). Существуют две простые, но очень полезные команды: <string>.ToLower() и <string>.ToUpper(). Они позволяют переводить всю строку целиком в нижний и верхний регистр соответственно. Чтобы оценить пользу от них, представьте ситуацию, когда вы хотите убедиться в поступлении от пользователя какого-то ответа, например, строки "yes". Если мы переведем всю введенную строку в нижний регистр, то сможем воспринять и такие строки, как "YES", "Yes", "yeS" и т. д.:
string userResponse = Console.ReadLine();
if (userResponse.ToLower() == "yes")
{
// выполнение действий в случае получения ответа
}
Обратите внимание, что эта команда, на самом деле не изменяет ту строку, к которой применяется. Напротив, использование этой команды для некоторой строки приводит к созданию новой строки, которую можно сравнить с какой-либо другой строкой (как показано выше) или присвоить другой переменной. В роли этой переменной может выступать переменная, над которой выполняется данная операция:
userResponse = userResponse.ToLower();
Это важный момент, о котором не следует забывать, поскольку с помощью записи:
userResponse.ToLower () ;
многого добиться не удастся!
Давайте посмотрим, что еще мы можем сделать для облегчения интерпретации ответов пользователя. Что произойдет в том случае, если пользователь случайно включил в начало или в конец своего ответа пробел? В таком варианте вышеприведенный код не сработает. Необходимо убрать из введенной строки все пробелы, чего можно добиться посредством команды <string>.Trim():
string userResponse = Console.ReadLine();
userResponse = userResponse,Trim();
if (userResponse.ToLower() == "yes")
{
//выполнение действий в случае получения ответа
}
В этом случае мы окажемся в состоянии определить строки, подобные следующим:
“ YES"
“Yes”
Такая же команда может быть использована для удаления любых других символов, которые задаются с помощью массива типа char, например:
char[] trimChars = {' ', 'е' , 's'};
string userResponse = Console.ReadLine();
userResponse = userResponse.ToLower();
userResponse = userRe spon.se. Trim {trimChars);
if (userResponse= = “y”)
{
// выполнение действий в случае получения ответа
}
Это позволяет удалить все пробелы, символы "е" и символы "s", находящиеся в начале или в конце строки. Если предположить, что в строке отсутствуют какие-либо другие символы, то появится возможность определять строки:
"Yeeeees"
“У”
и им подобные.
Существует также возможность использовать команды <string>.TrimStart() и <string>.TrimEnd(), которые будут удалять пробелы только из начала или только из конца строки соответственно. В этих командах также имеется возможность задания массива типа char удаляемых символов. Имеются еще две команды работы со строками, которые выполняют манипуляции с пробелами внутри строк: <string>.PadLeft() и <string>.PadRight(). Эти команды позволяют дополнять строки пробелами слева или справа до заданной длины строки. Они могут использоваться следующим образом:
< string>.PadX(< требуемаяДлина>);
Например:
myString =”Aligned”;
myString = myString.PadLeft(10);
В результате к слову “Aligned”, содержащемуся в переменной myString, будут добавлены три пробела слева. Этот метод может оказаться полезным для выравнивания строк, располагаемых одна над другой, в частности, при расположении строк с номерами. Так же, как и в случае команд, предназначенных для удаления символов, описываемые команды допускают вариант использования, позволяющий задавать символ, которым будет дополняться строка. В данном случае, однако, следует задавать отдельный символ, а не массив символов. Например:
myString =”Aligned”;
myString = myString.PadLeft(10, ' - ' ) ;
В итоге в начало строки, хранящейся в переменной mystring, будет добавлено три символа тире.
Пример работы со строками:
|
{
string myString = “This is a test .” ;
char[] separator = (‘ ‘);
string[] myWords;
myWords = myString;
}
Обратите внимание, что, как только вы
введете последнюю точку, немедленно
раскроется окно, показанное на рисунке
справа.
Не изменяя положение курсора, наберите символ s.
Содержание окна изменится, а рядом с ним появится
Текст на желтом фоне.
![]() |
Введите следующие символы: "(separator);". Окно закроется, а программа примет следующий вид:
static void Main (string [] args)
{
string myString = "This is a test.";
char[] separator = {‘ ‘} ;
string[] myWords;
myWords = myString.Split(separator);
}
Добавьте следующий код, обращая внимание на всплывающие окна:
static void Main(string[] args)
{
string myString = "This is a test.";
char [ ] separator = {‘ ‘} ;
string[] myWords;
myWords = myString.Split(separator) ;