Вход/Регистрация
Программирование на Objective-C 2.0
вернуться

Кочан Стивен

Шрифт:

Примечание. Описание структур см. в главе 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

  • Читать дальше
  • 1
  • ...
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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