Работа со строками string С#

Приветствую всех, сегодня поговорим о строках. Все мы так или иначе используем string в своих приложениях. Но у начинающих программистов возникают проблемы в понимании и с работой с этим типом. Строку можно представить в виде массива символов, однако это не так, так как строки являются ссылочными типами. Строка неизменна, каждый раз когда мы пытаемся изменить строку, старая стерается и создается новая. Так как строки являются ссылочными типами они находятся в куче.

Объявление и инициализация строк:

string str;
string str1 = "hello";
string str2 = null;

string str3 = new String('X', 3); // результатом будет строка "XXX"
string str4 = new String(new char[] { 'n', 'o', 'o', 'k', 'e', 'r', 'y', });

Как из строки по индексу получить символ?

string s1 = "nookery";
char ch1 = s1[4]; // символ 'e'
Console.WriteLine(ch1);

Так как мы знаем что строка, состоит из символов, то нам достаточно указать какой индекс символа нас интересует в строке и мы можем его вывести либо сохранить в переменной, что я и сделал. Однако изменить символ в строке нельзя, так как это не ссылочный тип переменных, для изменения данных в строке необходимо использовать доступные для этого  методы.

Как найти символ или целое слово в строке?

string str = "nookery it's fun!";
char ch = 'y';
int indexOfChar = str.IndexOf(ch); // равно 6
Console.WriteLine(indexOfChar);

Мы создали строку, и указали в качестве поиска символ y воспользовались методом IndexOf(); и сохранили результат в целочисленной переменной. Результат стал цифра 6, так как первое вхождение символа y было по индексу 6.

Так же мы можем осуществить не только поиск символа но и подстроки, в примере ниже мы из строки предложения, найдем целое слово!

string str = "nookery it's fun!";
string subString = "fun";
int indexOfSubstring = str.IndexOf(subString); // равно 13
Console.WriteLine(indexOfSubstring);

Мы в примере выше, воспользовались тем же метод IndexOf(); который принял другой аргумент, так как он имеет ряд перегрузок. И сохранили индекс вхождения слова в строку.

Еще одним часто используемым методом строк является StartsWith(); Который вернет true если слово в строке было найдено, в противном случаи false, таким образом этот метод можно использовать для поиска слова в тексте.

if(dg.StartsWith("nookery"))

Как разбить строку на слова?

В следующем примере возьмем строку и разобьем ее на слова сохраним в массив и выведем в консоль. А воспользуемся мы методом Split(); который принимает в качестве аргумента символ, в нашем случаи пробел.

string str = "nookery it's fun!";
string[] text = str.Split(' ');
foreach (string s in text)
 {
	Console.WriteLine(s);
 }

Метод Split(); возвращаем строковый массив, содержащий подстроки данного экземпляра, разделенного элементами заданного массива.

Однако этот метод не на столько хорош, как хотелось бы, потому что в строке между словами могло быть больше пробелов и соответственно это повлияло бы на разделения слов. Так как один пробел это один символ, два пробела два символа. А по этому лучше воспользоваться другим примером для разделения строки на слова:

string str = "nookery     it's fun!";
string[] text = str.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string s in text)
	{
		Console.WriteLine(s);
	}

В данном примере мы воспользовались другой перегрузкой метода Split(); первый аргумент символ пробела остался не измененным, но добавился второй аргумент StringSplitOptions.RemoveEmptyEntries который позволяет удалить все пустые подстроки.

Как обрезать или удалить символ в строке?

Для этого воспользуемся методом Trim(); Который позволяет без параметров удалить пробелы в начале и в конце строки, однако он имеет ряд полезных перегрузок одна из них, удаление в начале или в конце строки заданного  символа.

string text = " nookery it's fun! ";

text = text.Trim(); // результат "hello world"
text = text.Trim(new char[] {'n','!'}); // результат "ookery it's fu"

Для обрезки определенной части строки воспользуйтесь методом Substring(), имеет он два перегруженных метода, которые позволяют удалить до указанной позиции в начале строки и вторая перегрузка метода позволяет удалить с конца строки до указанной позиции символы.

string str = "nookery it's fun!";
// обрезаем строку до третьего символа
str = str.Substring(2);
// результат "okery it's fun!"
Console.WriteLine(str);
// обрезаем последние два символа
str = str.Substring(0, str.Length - 2);
// результат "okery it's fu"
Console.WriteLine(str);

Как вставить слово в строку в определенное место?

В этом примере мы рассмотрим метод Insert(); который позволяет вставить в строку по индексу подстроку.

string str = "nookery  fun!";
string subString = "it's";
str = str.Insert(8, subString);
Console.WriteLine(str);

Как видно из примера первый аргумент, это индекс с которого будет происходить вставка подстроки, а второй аргумент и есть сама подстрока.

Как удалить часть строки?

В этом нам поможет метод Remove(); Рассмотрим пример ниже:

string str = "nookery  fun!";
	
// индекс последнего символа
int i = str.Length - 1;
//удаляем последний символ
str= str.Remove(i);
Console.WriteLine(str);

// удаляем первые два символа
str = str.Remove(0, 2);
Console.WriteLine(str);

Как заменить слово в строке целиком?

Сейчас рассмотрим как можно в строке заменить полностью слово на другое. Для этого воспользуемся методом Replace();

string str = "nookery it's fun!";
str= str.Replace("fun!","super!");
Console.WriteLine(str);

В качестве первого аргумента метод принимает слово которое требует замены, если оно есть он поменяет его на слово которое во втором аргументе. Я этот метод еще использую когда требуется удалить определенное слово в строке. Для этого достаточно вторым аргументом  в  методе указать «» и ваше слово будет удаленно, можно так же им воспользоваться для удаления пробелов.

Как изменить регистр букв в строке на заглавные или прописные?

Это один из часто используемых  методов  ToLower(); ToUpper(); которые позволяют всю строку преобразовать в заглавную или прописную строку.

string str = "nookery it's fun!";
Console.WriteLine(str.ToLower()); // nookery it's fun!
Console.WriteLine(str.ToUpper()); // NOOKERY IT'S FUN!

Конкатенация строк!

В заключительной части со строками хотелось затронуть не маловажную роль конкатенации. Когда вы имеете две и более строк и вам необходимо их объединить, обычно мы используем оператор +

string str = "nookery";
str+="it's fun!";

Однако использовать их в длительных циклах, является грубой ошибкой и беспечностью, дело в том что в циклах таким образом создаются каждый раз новые экземпляры строки, тем самым увеличивая память, и уменьшает производительность программы. В этом можно убедиться в примере ниже:

string str = "";
for (int i = 0; i < 500000; i++)
{
	str += i.ToString() + ", ";
}

Что бы избежать подобного рода ошибок необходимо использовать класс StringBuilder(); и его методы, в примере продемонстрирован пример с верху но с использованием класса StringBuilder();

var builder = new StringBuilder();
for (int i = 0; i < 500000; i++)
{
	builder.Append(i);
	builder.Append(", ");
}

Интересной особенностью использования StringBuilder является еще одна фишка, можно сокращать длину строки следующим образом:

var builder = new StringBuilder();
builder.Append("Приветствую вас на сайте nookery");
builder.Length -= 7;
st.Length -= 10;
//Вывод
//Приветствую вас на сайте

Что интересно такой вариант не прокатит с обычными строками)

 

 

 

Обновлено: 18.01.2018 — 16:29

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.