Конкатенация строк или объединение может производиться как с помощью операции +
, так и с помощью метода Concat:
string s1 = "hello"; string s2 = "world"; string s3 = s1 + " " + s2; // результат: строка "hello world" string s4 = string.Concat(s3, "!!!"); // результат: строка "hello world!!!" Console.WriteLine(s4);
Метод Concat
является статическим методом класса string, принимающим в качестве параметров две строки. Также имеются другие версии
метода, принимающие другое количество параметров.
Для объединения строк также может использоваться метод Join:
string s5 = "apple"; string s6 = "a day"; string s7 = "keeps"; string s8 = "a doctor"; string s9 = "away"; string[] values = new string[] { s5, s6, s7, s8, s9 }; string s10 = string.Join(" ", values); Console.WriteLine(s10); // apple a day keeps a doctor away
Метод Join также является статическим. Использованная выше версия метода получает два параметра: строку-разделитель (в данном случае пробел) и массив строк, которые будут соединяться и разделяться разделителем.
Для сравнения строк применяется статический метод Compare:
string s1 = "hello"; string s2 = "world"; int result = string.Compare(s1, s2); if (result<0) { Console.WriteLine("Строка s1 перед строкой s2"); } else if (result > 0) { Console.WriteLine("Строка s1 стоит после строки s2"); } else { Console.WriteLine("Строки s1 и s2 идентичны"); } // результатом будет "Строка s1 перед строкой s2"
Данная версия метода Compare принимает две строки и возвращает число. Если первая строка по алфавиту стоит выше второй, то возвращается число меньше нуля. В противном случае возвращается число больше нуля. И третий случай - если строки равны, то возвращается число 0.
В данном случае так как символ h по алфавиту стоит выше символа w, то и первая строка будет стоять выше.
С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:
string s1 = "hello world"; char ch = 'o'; int indexOfChar = s1.IndexOf(ch); // равно 4 Console.WriteLine(indexOfChar); string substring = "wor"; int indexOfSubstring = s1.IndexOf(substring); // равно 6 Console.WriteLine(indexOfSubstring);
Подобным образом действует метод LastIndexOf, только находит индекс последнего вхождения символа или подстроки в строку.
Еще одна группа методов позволяет узнать начинается или заканчивается ли строка на определенную подстроку. Для этого предназначены методы StartsWith и EndsWith. Например, в массиве строк хранится список файлов, и нам надо вывести все файлы с расширением exe:
var files = new string[] { "myapp.exe", "forest.jpg", "main.exe", "book.pdf", "river.png" }; for (int i = 0; i < files.Length; i++) { if (files[i].EndsWith(".exe")) Console.WriteLine(files[i]); }
С помощью функции Split мы можем разделить строку на массив подстрок. В качестве параметра функция Split
принимает массив символов или строк, которые и будут служить разделителями. Например, подсчитаем количество слов в сроке,
разделив ее по пробельным символам:
string text = "И поэтому все так произошло"; string[] words = text.Split(new char[] { ' ' }); foreach (string s in words) { Console.WriteLine(s); }
Это не лучший способ разделения по пробелам, так как во входной строке у нас могло бы быть несколько подряд идущих пробелов и в итоговый массив также бы попадали пробелы, поэтому лучше использовать другую версию метода:
string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
Второй параметр StringSplitOptions.RemoveEmptyEntries
говорит, что надо удалить все пустые подстроки.
Для обрезки начальных или концевых символов используется функция Trim:
string text = " hello world "; text = text.Trim(); // результат "hello world" text = text.Trim(new char[] { 'd', 'h' }); // результат "ello worl"
Функция Trim без параметров обрезает начальные и конечные пробелы и возвращает обрезанную строку. Чтобы явным образом указать, какие начальные и конечные символы следует обрезать, мы можем передать в функцию массив этих символов.
Эта функция имеет частичные аналоги: функция TrimStart обрезает начальные символы, а функция TrimEnd обрезает конечные символы.
Обрезать определенную часть строки позволяет функция Substring:
string text = "Хороший день"; // обрезаем начиная с третьего символа text = text.Substring(2); // результат "роший день" Console.WriteLine(text); // обрезаем сначала до последних двух символов text = text.Substring(0, text.Length - 2); // результат "роший де" Console.WriteLine(text);
Функция Substring также возвращает обрезанную строку. В качестве параметра первая использованная версия применяет индекс, начиная с которого надо обрезать строку. Вторая версия применяет два параметра - индекс начала обрезки и длину вырезаемой части строки.
Для вставки одной строки в другую применяется функция Insert:
string text = "Хороший день"; string substring = "замечательный "; text = text.Insert(8, substring); Console.WriteLine(text); // Хороший замечательный день
Первым параметром в функции Insert является индекс, по которому надо вставлять подстроку, а второй параметр - собственно подстрока.
Удалить часть строки помогает метод Remove:
string text = "Хороший день"; // индекс последнего символа int ind = text.Length - 1; // вырезаем последний символ text = text.Remove(ind); Console.WriteLine(text); // Хороший ден // вырезаем первые два символа text = text.Remove(0, 2); Console.WriteLine(text); // роший ден
Первая версия метода Remove принимает индекс в строке, начиная с которого надо удалить все символы. Вторая версия принимает еще один параметр - сколько символов надо удалить.
Чтобы заменить один символ или подстроку на другую, применяется метод Replace:
string text = "хороший день"; text = text.Replace("хороший", "плохой"); Console.WriteLine(text); // плохой день text = text.Replace("о", ""); Console.WriteLine(text); // плхй день
Во втором случае применения функции Replace строка из одного символа "о" заменяется на пустую строку, то есть фактически удаляется из текста. Подобным способом легко удалять какой-то определенный текст в строках.
Для приведения строки к верхнему и нижнему регистру используются соответственно функции ToUpper() и ToLower():
string hello = "Hello world!"; Console.WriteLine(hello.ToLower()); // hello world! Console.WriteLine(hello.ToUpper()); // HELLO WORLD!