На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Урок по работе со строками (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);





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





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




Перенос сайта на другую CMS
Исходный код программы "Не меняй!"


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.