Урок по работе со строками (String) на C#


Давайте на конкретном примере научимся работать со строками в C#: объединять их, разделять, находить нужную позицию символа и вставлять подстроки. Урок написан специально для Александра из Китая :)

Итак, на одном из прошлых занятий мы создали консольный калькулятор на си шарп. Итоговое значение калькулятора представляет собой число. Тип – int или double. Нам необходимо это число привести к такому виду, чтобы удобно было читать: отделять запятой по три значения – то есть каждый тысячный – миллионный и миллиардный разряды.

Например, предположим, в итоге у нас получилось число 345870124, требуется привести его к виду 345,870,124. Есть разные способы решения этой задачи, мы рассмотрим один из них и на примере его научимся работать со строками.

Прежде всего, нам надо число преобразовать в строку. Это можно сделать несколькими способами. Самый простой – это использовать метод ToString:

int itog = 345870124;
String str = itog.ToString();
Или так:

String str = itog+"";
В этом случае компилятор сам автоматически создаст пустую строку, а при конкатенации числа с этой пустой строкой результат также автоматически будет строкой.

Итак, строку мы получили. Теперь необходимо вставить в неё запятые в нужных местах. Для этого надо использовать функцию Insert: Insert (“индекс элемента”, ”строка”); То есть, в нашем конкретном случае это будет выглядеть так:

String itog_str = str.Insert(3, ",");
itog_str = itog_str.Insert(7, ",");
Что мы сделали? Мы вставили после третьего символа запятую в первой строке кода, а во второй – после седьмого. Почему после седьмого? Потому, что после вставки у нас увеличилась длина.

Казалось бы, задача решена? Не совсем. Дело в том, что мы сейчас имеем дело с определённым числом, а что если оно будет другим. Например, таким:

int itog = 1000000;
String str = itog.ToString();
String itog_str = str.Insert(3, ",");
itog_str = itog_str.Insert(7, ",");
И получим мы вот такую строку в результате: 100,000,0. Почему так получилось? Просто мы считали с начала строки индекс, а необходимо работать с конца. Для этого надо для начала найти длину строки:

int dlinaStroki = str.Length;
Теперь, зная длину, просто вычитаем из неё три и вставляем запятую:

String itog_str = str.Insert(dlinaStroki - 3, ",");
Это для отделения тысяч. А миллионов?

String itog_str = str.Insert(dlinaStroki - 3, ",");
itog_str = itog_str.Insert(dlinaStroki - 6, ",");
Аналогично можно продолжить и выше. Для чисел типа int этого вполне хватит, но есть и другие. Обертка BigInteger или хотя бы long, ulong. Вот что делать с таким числом:

ulong itog = 10000000000000000000; 
А все просто. Находим длину его, делим на три и циклом проходим столько раз, сколько надо:

ulong itog = 10000000000000000000;
String str = itog.ToString();

int dlinaStroki = str.Length;
int prohod = (dlinaStroki-1) / 3;
for (int i = 1; i <= prohod; i++) {
str = str.Insert(dlinaStroki - 3*i, ",");
}

Console.WriteLine(str);
Console.ReadKey();
Работает?



Работает. Причем с числами любой длины: от единицы и до бесконечности. Теоретически.

Интересный момент: мы из длины строки вычитаем единицу, перед тем, как разделить её на три. Зачем это делается? Дело в том, что если этого не сделать, то у нас получается лишний последний проход и будет запятая перед числом – особенности целочисленного деления.

Задачу мы решили. Но еще познакомимся с парой методов для строк, которые могут быть полезны и стоит их знать любому программисту.

Обрезка строк

Обрезать определенную часть строки позволяет функция Substring:

String txt = "Игра продолжается";
// обрезаем начиная с пятого символа
txt = txt.Substring(4);
// результат "продолжается"
Console.WriteLine(text);
Поиск в строке

С помощью метода IndexOf мы можем определить индекс первого вхождения отдельного символа или подстроки в строке:

String st = "Привет, друг";
char ch = 'т';
int indexOfChar = st.IndexOf(ch); // равно 5
Console.WriteLine(indexOfChar);
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, си шарп, строки, string




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.



Урок 5. Оператор SELECT
Урок 17. Оператор typeof JavaScript
Липовый счетчик лиру: межстрочный интервал и наведение