Вторник
19.09.2017, 18:13
Сайт, посвящённый C#
Приветствую Вас Гость | RSS
Главная Каталог статей Регистрация Вход
Меню сайта

Категории раздела
Статьи по C# [10]

Главная » Статьи » Статьи по C#

Манипуляции строками
На данный момент, мы могли начать уставать от всех этих чисел и математики, ввода и вывода. Хочется сделать программу, которая делла бы хоть что-нибудь существенное, да? Ну, не надо беспокоиться мы скоро начнем использовать изученный материал. Нам осталось чуть-чуть... Самую малость... Мы уже знаем как управляться с числами, самое время узнать что можно делать с текстом!
Манипуляция строками (или "текстом") еще удобнее чем использование класса "Math" с числами. Нам не нужен отдельный класс для выполнения специальных функций потому, что каждая строчная переменая переменная уже имеет в себе все, что нам нужно. Например, следующий код выводит в консоль строку состоящюю только из заглавных букв:
string test = " Тестируем различные функции СТРОК!";
Console.WriteLine(test.ToUpper());
А вот и результат:
ТЕСТИРУЕМ РАЗЛИЧНЫЕ ФУНКЦИИ СТРОК!
А также мы можем сохранить результат конверсии в другой строковой переменной и использовыть ее позже:
string testUpper = test.ToUpper();
Console.WriteLine(testUpper);
Можем перезаписать значение переменной на конверсию ее же самой:
testUpper = testUpper.ToUpper();
Просто надо не забывать использовать "=" при присваивании значения конверсии. Следующий код не делает абсолютно ничего:
testUpper.ToUpper();
Также как использование ReadLine() без присваивания будет бесполезно, использование ToUpper() без присваивания тоже не сохранит результата... Вернее он уйдет в небытие... У ToUpper() есть близнец ToLower(). Интересно что он делает?
Не будем беспокоиться насчет такого глупого вопроса, поэтому продолжим - анализ строк. Можем использовать свойство строки "Length" для того, чтобы узнать количество символов в ней:
string name = "Bartholomew";
int length = name.Length;
Console.WriteLine("Длина имени: " + length);
Можно использовать функции StartsWith() и EndsWith() для того, чтобы узнать начинается или заканчивается ли строка определеной последовательностью символов. Смотрим:
Console.WriteLine("Начинается на \"Ba\"?\t" + name.StartsWith("Ba"));
Console.WriteLine("Начинается на \"Bart\"?\t" + name.StartsWith("Bart"));
Console.WriteLine("Начинается на \"Barter\"?\t" + name.StartsWith("Barter"));
Console.WriteLine("Оканчивается на \"mew\"?\t" + name.EndsWith("mew"));
Первые два утверждения выведут в консоли "True", ведь "Bartholomew" содержит и "Ba", и "Bart". Но, так как оно не начинается с "Barter", то результат третьего утверждения будет "False". Четвертая строка также выдаст "True" - "Bartholomew" оканчивается на "mew". Нам может быть интересно, каким же образом С# знает что писать в консоли - "True" или "False"... Дело в том, что BeginsWith() и EndsWith() возвращают значение такого типа, с которым мы еще не знакомы - "bool" (булевые). Это специальный тип переменных, который может принять только два значения - "True" или "False". Мы увидим в следующей главе, что они очень полезны, а пока просто проигнорируем их... Еще одна забавная вещь в строках - это возможность поиска отдельных слов и букв в них. Смотрим:
Console.WriteLine("Первый индекс 'B': " + name.IndexOf("B"));
Console.WriteLine("Первый индекс 'a': " + name.IndexOf("a"));
Console.WriteLine("Первый индекс 'r': " + name.IndexOf("r"));
Console.WriteLine("Последний индекс 'o': " + name.LastIndexOf("o"));
В результате получим:
Первый индекс 'B': 0
Первый индекс 'a': 1
Первый индекс 'r': 2
Последний индекс 'o': 7
На всякий случай oбъясняю: индекс означает позицию. Как видим, методы IndexOf() возвращают позицию искомого символа в строке(можно искать сразу несколько символов или текст, а не просто один символ как сейчас).
Надо заметить, что позиция(индекс) "В" является 0. Вторая буква, "а" считается на позиции 1 и т.д. Здесь, в С#, отсчет начинается с 0, а не с 1. Придется смириться с этим… LastIndexOf() работает примерно также, только он возвращает позицию последнего искомого символа/строки. Ну, теперь ниже мы можем находить первый и последние индексы в тексте. А что если нам надо найти тот, что между ними? В этом случае, вызываем метод IndexOf(), но уже предоставляем точку отсчета...
int firstIndex = name.IndexOf("o");
Console.WriteLine("Первый индекс'o': " + firstIndex);

int secondIndex = name.IndexOf("o", firstIndex+1);
Console.WriteLine("Второй индекс'o': " + secondIndex);

int thirdIndex = name.IndexOf("o", secondIndex+1);
Console.WriteLine("Третий индекс'o': " + thirdIndex);
Получим:
Первый индекс 'o': 5
Второй индекс 'o': 7
Третий индекс 'o': -1
вызов IndexOf() такой же как и в первый раз. Во втором случае же мы используем индекс, полученный ранее. Наверное интересно, почему к нему прибавлена единица? Потому что мы хотим продолжить поиск после первого индекса. Если начнем новый поиск с той же позиции, то опять получим первый индекс.
А что же насчет "-1", который мы получили при третьем вызове функции? Ну, "-1" имеет специальное значение в сфере программирования. Его часто используют для обозначения "неприменимый", или "вне досягаемости". И так как в "Bartholomew" нет третьего "о", становится прекрасно ясно, почему же мы получили результат "вне досягаемости".
А теперь давайте попробуем пару трюков из форматирования. Мы уже знаем как использовать "\t", поэтому попробуем кое-что более зощренное...
string season1 = "весна", season2 = "лето", season3 = "осень", season4 = "зима";
Console.WriteLine(season1.PadLeft(10, '.'));
Console.WriteLine(season2.PadLeft(10, '.'));
Console.WriteLine(season3.PadLeft(10, '.'));
Console.WriteLine(season4.PadLeft(10, '.'));
Код выдаст следующий результат:
.....весна
......лето
.....осень
......зима
В этом случае, в PadLeft() мы передали 2 параметра: число и символ. (Заметим, что единичные символы заключены в одинарные кавычки, а строки в двойные). Число - это нужная нам длина строки. Как видим, каждая строка длиной в 10 символов. Если строка короче 10 символов, метод "набивает" строку, добавляя слева дополнительные символы, до тех пор, пока строка не достигнет нужной длины. Добавляется тот символ, который мы передали в функции. Существует также метод PadRight() , который делает то же самое, только справа.
Противоположное "набивке" - урезание. Можно использовать TrimStart() и TrimEnd() чтобы убрать нежелательные символы с начала и конца строки, или Trim() для удаления их с обоих концов. Они настолько просты, что понять можно с первого взгляда:
string rubbish = "......... привет.....";
Console.WriteLine(rubbish);
Console.WriteLine(rubbish.TrimEnd('.'));
Console.WriteLine(rubbish.TrimStart('.'));
Console.WriteLine(rubbish.Trim('.'));
А вот и результат:
.........привет.....
.........привет
привет.....
привет
Просто, не правда ли? Мы передаем в Trim() тот символ, от которого хотим избавиться и оставляем всю грязную работу на С#. Последнее с чем нужно познакомимся - это подстрока. В программировании много случаев, когда надо "отрезать" определенный "кусочек" строки. Сделать это можно с помощью Substring(). Например:
string name2 = name.Substring(0, 5);
string name3 = name.Substring(4, 2);
string name4 = name.Substring(5, name.Length-5);
Console.WriteLine(name2);
Console.WriteLine(name3);
Console.WriteLine(name4);
Так как переменная "name" у нас все еще "Bartholomew", то получим следующий результат:
Barth
ho
olomew
Сначала мы передали в Substring() 0 - позицию старта и 5 - длину подстроки. Поэтому она начинается с первой буквы в стоке и продолжается следующими 4 буквами (всего 5 - ровно столько, сколько запросили). Вот почему результат - "Barth".
Нужно быть осторожным при использовании подстрок. Если запросите ее с параметрами больше длины строки, программа умрет. Например, "Bartholomew" состоит из 11 символов (можно использовотать метод Length, если так охота проверить). если бы мы запросили подстроку, начиная с 10 символа, а затем обрезая следующие 8 , программа умрет. Ведь после десятого есть только один символ!
Еще одна забавная вещь - возможность вставлять специальные символы в строку. Используем "\u", вместе с кодом спец. символа. Например, "\u263a" вставит ":)" в текст. Чтобы узнать коды всех спец символов можно воспользоваться утилитой "Character Map" из Start Menu\All Programs\Accsessories\System Tools\
Эти пять уроков, если их прочитать могут дать достаточно сильную основу для базовых навыков. Самое время создать программу, которая действительно будет что-то делать! Но сначала пример кода:
using System;

namespace E_StringManipulation
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
// Конвертируем в строчные и заглавные буквы
string test = "Testing the various functions of STRINGS!";
string testUpper = test.ToUpper();
string testLower = test.ToLower();
Console.WriteLine(test);
Console.WriteLine(testUpper);
Console.WriteLine(testLower);

// Находим длину, части слова
string name = "Bartholomew";
Console.WriteLine(Environment.NewLine + "Name = " + name);
Console.WriteLine("Длина имени: " + name.Length);
Console.WriteLine("Начинается на \"Ba\"?\t" + name.StartsWith("Ba"));
Console.WriteLine("Начинается на \"Bart\"?\t" + name.StartsWith("Bart"));
Console.WriteLine("Начинается на \"Barter\"?\t" + name.StartsWith("Barter"));
Console.WriteLine("Оканчивается на \"mew\"?\t" + name.EndsWith("mew"));

// Находим позицию текста в строке
Console.WriteLine(Environment.NewLine + "Первый индекс 'B': " + name.IndexOf("B"));
Console.WriteLine("Первый индекс 'a': " + name.IndexOf("a"));
Console.WriteLine("Первый индекс 'r': " + name.IndexOf("r"));

int firstIndex = name.IndexOf("o");
Console.WriteLine("Первый индекс 'o': " + firstIndex);

int secondIndex = name.IndexOf("o", firstIndex + 1);
Console.WriteLine("Второй индекс 'o': " + secondIndex);

int thirdIndex = name.IndexOf("o", secondIndex + 1);
Console.WriteLine("Третий индекс 'o': " + thirdIndex);

Console.WriteLine("Последний индекс 'o': " + name.LastIndexOf("o"));

// "Набивка"
string season1 = "весна", season2 = "лето", season3 = "осень", season4 = "зима";
Console.WriteLine(Environment.NewLine + season1.PadLeft(10, '.'));
Console.WriteLine(season2.PadLeft(10, '.'));
Console.WriteLine(season3.PadLeft(10, '.'));
Console.WriteLine(season4.PadLeft(10, '.'));

// "Отрезание"
string rubbish = ".........привет.....";
Console.WriteLine(Environment.NewLine + rubbish);
Console.WriteLine(rubbish.TrimEnd('.'));
Console.WriteLine(rubbish.TrimStart('.'));
Console.WriteLine(rubbish.Trim('.'));

// Подстрока
string name2 = name.Substring(0, 5);
string name3 = name.Substring(4, 2);
string name4 = name.Substring(5, name.Length - 5);
Console.WriteLine(Environment.NewLine + name2);
Console.WriteLine(name3);
Console.WriteLine(name4);

// А теперь попросим пользователя нажать "Enter" для выхода из программы
Console.WriteLine("Программа завершена. Нажмите \"Enter\" для выхода...");
Console.ReadLine();

}
}
}



Источник: http://devoid.com.ua/csharp/csharp-nauchitsa-ili-umeret/manipulacii-so-strokami.html
Категория: Статьи по C# | Добавил: Lefthandboy (21.09.2009)
Просмотров: 6210 | Комментарии: 14 | Рейтинг: 0.0/0
Всего комментариев: 131 2 »
13  
http://www.sarvajal.com - viagra

12  
You can of course wear corduroy all year long, but it seems that the beginning of the cooler weather in the Fall is the time when most are reminded to wear clothes that provide more protection from the cold, so out comes the corduroy. http://www.cheaplouisvuittonbagsx.com/#73277 - cheap real louis vuitton purses and handbags - http://www.cheaplouisvuittonbagsx.com/#87624 - louis vuitton purses cheap , http://www.cheaplouisvuittonbagsx.com/#23973

11  
While the musical jacket is an example of how computerized clothing could be used for entertainment, researchers at the Georgia Institute of Technology have developed a practical, medical purpose for this technology. http://www.isabelmarantsneakersboutique.com/#98187 - isabel marant 8mm bekket suede sneakers - http://www.isabelmarantsneakersboutique.com/#94942 - isabel marant sneakers 2012 , http://www.isabelmarantsneakersboutique.com/#54637

10  
A conventional choice for this style is the two-piece floral jacquard suit with rosette detail. http://www.cheaplouisvuittonbagsx.com/#94266 - louis vuitton outlet - http://www.cheaplouisvuittonbagsx.com/#94494 - louis vuitton purses cheap , http://www.cheaplouisvuittonbagsx.com/#63614

9  
Many people come to see their pets as family members and will buy them the best possible goods that they can afford. http://www.cheapmonclerjacketsx.com/#49256 - moncler sales - http://www.cheapmonclerjacketsx.com/#54372 - moncler usa online shop , http://www.cheapmonclerjacketsx.com/#54781

8  
You can find wide range of mens leather jacket and design available in the market; they are also available in some online store for much reasonable rates, and discount prices. http://www.isabelmarantsneakersboutique.com/#85651 - isabel marant ziane jeans - http://www.isabelmarantsneakersboutique.com/#98639 - isabel marant dicker boots black , http://www.isabelmarantsneakersboutique.com/#15217

7  
Attaching the hood. http://www.isabelmarantsneakersboutique.com/#37753 - perkins isabel marant - http://www.isabelmarantsneakersboutique.com/#77798 - isabel marant shoes , http://www.isabelmarantsneakersboutique.com/#52351

6  
A 25% reduction or substitution in the "building" would free up more than enough copper. http://www.isabelmarantsneakersboutique.com/#13794 - isabel marant shoes - http://www.isabelmarantsneakersboutique.com/#96953 - isabel marant online store , http://www.isabelmarantsneakersboutique.com/#31331

5  
http://auto-saratov.com - продажа авто в саратове
,все для авто саратов магазин
[URL="http://auto-saratov.com" - [IMG - http://auto-saratov.com/avto.png[/IMG - [/URL -

4  
Архитектурное бюро http://glavbar.com/

1-10 11-13
Имя *:
Email *:
Код *:
Форма входа

Поиск

Друзья сайта
  • Сайт, посвещённый С++
  • Lefthandboy's blog
  • Копилка знаний
  • Разработка игр
  • Бесплатная раскрутка сайта
  • База лохотронщиков

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0


    Copyright CSharp-Exe © 2017
    Сделать бесплатный сайт с uCoz