Чтение онлайн

на главную - закладки

Жанры

Программирование на Objective-C 2.0
Шрифт:

где просто создается еще одна ссылка на тот же объект в памяти.

Метод stringByAppendingString: позволяет объединять две символьные строки. Например, с помощью выражения [strl stringByAppendingString: str2]

создается новый строковый объект, содержащий символы из strl, после которых следуют символы из str2, и этот объект возвращается как результат. Эта операция не влияет на исходные строковые объекты strl и str2, поскольку они являются немутабсльными строковыми объектами.

За тем метод isEqualToString: проверяет две строки на равенство символов. Метод compare: позволяет определить их упорядоченность, например, сортировку массива строк. Аналогично методу compare:, который мы использовали выше для сравнения двух объектов класса NSNumber, результатом сравнения является NSOrderedAscending, если первая строка лексически меньше второй строки, NSOrderedSame, если строки

равны, и NSOrderedDescending, если первая строка лексически больше второй. Если вам не нужно учитывать регистр букв, исполь-зуйте метод caselnsensitiveCompare: вместо метода compare:. В этом случае два строковых объекта @"Gregory" и @ngregory" будут считаться равными.

Методы uppercaseString и lowercaseString преобразуют строки в верхний и ниж-ний регистр соответственно. Это преобразование тоже не влияет на исходные строки, что подтверждается последней строкой вывода.

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

В некоторых методах требуется идентифицировать подстроку, указав диа-пазон. Диапазон (range) задается с помощью начального индекса (порядкового номера) и числа символов. Порядковые номера начинаются с нуля; например, первые три символа строки указываются парой чисел {0,3}. В некоторых методах класса NSString (а также других классов Foundation) для описания диапазона используется специальный тип данных NSRange. Он определен в файле foundation/ NSRange.h> (который включен для вас из ) и является на самом деле typedef-определением структуры, содержащей два компонента: location (позиция) и length (длина), каждый из которых определен с типом NSUinteger. Этот тип данных используется в программе 15.4,

Примечание. Описание структур см. в главе 13 и в следующих разделах этой главы. // Основные операции со строками - Продолжение #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import <Foundation/NSAutoreleasePool.h> int main (int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Извлечение первых трех символов из строки res = [str1 substringToIndex: 3]; NSLog (@"First 3 chars of str1: %@", res); // Извлечение символов до конца строки, начиная с индекса 5 res = [strl substringFromlndex: 5]; NSLog (@"Chars from index 5 of strl: %@", res); // Извлечение символов, начиная с номера 8, до номера 13 (6 символов) res = [[strl substringFromlndex: 8] substringToIndex: б]; NSLog (@"Chars from index 8 through 13: %@", res); // Более простой способ сделать то же самое res = [strl substringWithRange: NSMakeRange (8, 6)]; NSLog (@"Chars from index 8 through 13: %@", res); // Проверка присутствия одной строки внутри другой subRange = [str1 rangeOfString: @"string A"]; NSLog ((@"String is at index %lu, length is %lu", subRange.location, subRange.length); subRange = [str1 rangeOfString: @"string B"j; if (subRange.location == NSNotFound) NSLog (@"String not found"); else NSLog (@"String is at index %lu, length is %lu", subRange.location, subRange.length); [pool drain]; return 0; }

Вывод программы 15,4 First 3 chars of str1: Thi (Первые 3 символа str1) Chars from index 5 of str1: is string А (Символы str1, начиная с номера 5) Chars from index 8 through 13: string (Символы с номерами 8-13) Chars from index 8 through 13: string String is at index 8, length is 8 (Строка, начиная с номера 8, длина 8) String not found (Строка не найдена)

Метод substringToIndex: создаст подстроку от первого символа указанной строки до символа с указанным индексом (но не включая сам этот символ). По-скольку отсчет индексов начинается с 0, аргумент со значением 3 означает, что нужно извлечь из строки символы с номерами 0, 1 и 2 и возвратить результиру-ющий строковый объект. Для любого из строковых методов, которым в качестве одного из аргументов передается индекс, выводится сообщение об ошибке «Range or index out of bounds» (Диапазон или индекс вне допустимых границ), если указан неверный индекс для данной строки.

Метод substringFromlndex: возвращает подстроку из строки-получателя сооб-щения от символа с указанным индексом до конца строки. Выражение res = [[str1 substringFromlndex: 8] substringToIndex: 6);

показывает, как сочетать эти методы для извлечения подстроки символов изнутри строки. Сначала используется метод substringFromlndex: для извлечения сим-волов, начиная с номера 8, вплоть до конца строки. Затем к результату приме-няется метод substringToIndex: для получения первых 6 символов. Конечным результатом является подстрока, представляющая

диапазон символов {8, 6} из исходной строки.

Метод substringWittiRange: делает за один шаг то, что мы только что сделали за два. Ему передается диапазон, и он возвращает строку в указанном диапазоне. Специальная функция NSMakeRange (8, 6)

создает диапазон из своего аргумента и возвращает результат, который передается как аргумент методу substringWittiRange:.

Чтобы найти одну строку внутри другой, можно использовать метод rangeOfString:. Если указанная строка найдена внутри строки-получателя, возвра-щаемое значение диапазона точно указывает, где найдена эта строка. Если строка не найдена, то компонент location содержит значение NSNotFound. Например, оператор subRange = [strl rangeOfString: @"string A"];

присваивает структуру NSRange, возвращаемую этим методом, переменной subRange типа NSRange. Обратите внимание, что subRange — это не переменная- объект, а переменная-структура (объявление subRange в этой программе не со-держит звездочку). Компоненты этой структуры можно получать с помощью оператора «точка». Таким образом, выражение subRange.location дает значение компонента location (позиция) этой структуры, a subRange.length дает значение компонента length (длина). Эти значения передаются для вывода функции NSLog. Мутабельные строки

Для создания строковых объектов, символы которых доступны для изменения, применяется класс NSMutableString. Поскольку он является подклассом NSString, можно использовать все методы класса NSString.

Когда мы сравниваем возможности мутабельных строковых объектов с не- мутабельными, то имеем в виду изменение конкретных символов внутри строки. Как мутабельному, таки немутабельному строковому объекту во время вы-полнения программы можно присвоить совершенно другой строковый объект. strl = @"This is a string"; strl = [strl substringFromlndex: 5];

В данном случае объекту strl сначала присваивается константный строковый объект, затем в программе ему присваивается подстрока. В данном случае strl можно объявить и как мутабельный, и как немутабельный строковый объект. В программе 15.5 показаны некоторые способы работы с мутабельными строками в программах. // Основные операции со строками - м/табельные строки #import <Foundation/NSObject.h> #import <Foundation/NSString.h> #import <Foundation/NSAutoreleasePool.h> int main (int argc, char *argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSString *strl = @'This is string A"; NSString *search, *replace; NSMutableString *rnstr; NSRange substr; // Создание мутабельных строк из немутабельных rnstr = [NSMutableString stringWithString: strl]; NSLog rnstr); // Вставка символов [mstr insertString: @" mutable" atlndex: 7]; NSLog(@"%@", rnstr); // Фактическая конкатенация при вставке в конец [mstr insertstring: @" and string В" atlndex: [mstr length]]; NSLog (@"%@", rnstr); // Или непосредственное использование appendString [mstr appendString: @" and string C"]; NSLog (@"%@", rnstr); // Удаление подстроки с указанным диапазоном [mstr deleteCharactersInRange: NSMakeRange (16, 13)]; NSLog (@"%@", rnstr); // Сначала определение диапазона и затем его использование для удаления substr = [rnstr rangeOIString: @"string В and "]; if (substr.location != NSNotFound) { [mstr deleteCharactersInRange: substr]; NSLog(@"%@", mstr); } // Непосредственное задание мутабельной строки [mstr setString: @"This is string A"]; NSLog (@"%@", mstr); // Теперь заменяем диапазон символов другой строкой [mstr replaceCharactersInRange: NSMakeRange(8, 8) withString: @"a mutable string"]; NSLog (@"%@", mstr); // Поиск и замена search = @"This is"; replace = @"An example of"; substr = [mstr rangeOfString: search]; if (substr.location != NSNotFound) { [mstr replaceCharactersInRange: substr withString: replace]; NSLog (@"%@", mstr); } // Поиск и замена всех экземпляров search = @"а"; replace = @"Х"; substr = [mstr rangeOfString: search]; while (substr.location != NSNotFound) { [mstr replaceCharactersInRange: substr withString: replace]; substr = [mstr rangeOfString: search]; } NSLog (@"%@", mstr); [pool drain]; return 0; }

Вывод программы 15.5 This is string А (Это строка A) This is mutable string А (Это мутабельная строка A) This is mutable string A and string В (Это мутабельные строка А и строка В) This is mutable string A and string В and string С (Это мутабельные строка А, строка В и строка С) This is mutable string В and string С (Это мутабельные строка В и строка С) This is mutable string С (Это мутабельная строка С) This is string А (Это строка А) This is a mutable string (Это мутабельная строка) An example of a mutable string An exXmple of X mutXble string

Поделиться:
Популярные книги

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Барон переписывает правила

Ренгач Евгений
10. Закон сильного
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Барон переписывает правила

Казачий князь

Трофимов Ерофей
5. Шатун
Фантастика:
боевая фантастика
попаданцы
альтернативная история
5.00
рейтинг книги
Казачий князь

Законы Рода. Том 13

Андрей Мельник
13. Граф Берестьев
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 13

Ст. сержант. Назад в СССР. Книга 5

Гаусс Максим
5. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ст. сержант. Назад в СССР. Книга 5

Мы друг друга не выбирали

Кистяева Марина
1. Мы выбираем...
Любовные романы:
остросюжетные любовные романы
прочие любовные романы
современные любовные романы
5.00
рейтинг книги
Мы друг друга не выбирали

Хозяин Стужи 2

Петров Максим Николаевич
2. Злой Лед
Фантастика:
аниме
фэнтези
попаданцы
5.75
рейтинг книги
Хозяин Стужи 2

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

Зайти и выйти

Суконкин Алексей
Проза:
военная проза
5.00
рейтинг книги
Зайти и выйти

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Эфемер

Прокофьев Роман Юрьевич
7. Стеллар
Фантастика:
боевая фантастика
рпг
7.23
рейтинг книги
Эфемер

Идеальный мир для Лекаря 5

Сапфир Олег
5. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 5

Наследник павшего дома. Том I

Вайс Александр
1. Расколотый мир
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том I