Показаны сообщения с ярлыком NSString. Показать все сообщения
Показаны сообщения с ярлыком NSString. Показать все сообщения

8 мар. 2015 г.

Удаление / замена ненужных символов в строке


Иногда нам нужно избавиться от ненужных символов в строке, так как они могут помешать нам что либо реализовать. Например ответ от сервера с не отформатированным JSON`ом, ключи и значения которого просто разделены запятыми. По запятым мы строку разбить можем, а дальше у нас в подстроках присутствует JSON`овский мусор ( {[ключ:значение] ).
Почистить строку довольно просто (например я использую данную функцию чтобы преобразовать запятую в точку, когда пользователь вводит число с плавающей точкой с русской раскладкой):

// Смена запятой в числе на точку

- (NSString *)replacePriceCountToDotCharacter:(NSString *)string {
    
    NSCharacterSet *charactersToRemove = [NSCharacterSet characterSetWithCharactersInString:@","];
    NSString *trimmedReplacement = [[string componentsSeparatedByCharactersInSet:charactersToRemove]
                                    componentsJoinedByString:@"."];
    
    return trimmedReplacement;

}

Вместо запятой можно прописать любые символы (не разделяя никакими пробелами или запятыми) которые нужно удалить или заменить (вместо точки) на другие. Для простого удаления достаточно убрать точку и оставить строку пустой ( @"" ).

6 апр. 2014 г.

Определение домашней папки пользователя

Определение домашней папки пользователя

//get user home
+(NSString *)getUserHome
{
    const char *home = getpwuid(getuid())->pw_dir;
    NSString *path = [[NSFileManager defaultManager]
                      stringWithFileSystemRepresentation:home
                      length:strlen(home)];
    NSString *realHomeDirectory = [[NSURL fileURLWithPath:path isDirectory:YES] path];
    
    return realHomeDirectory;
}

Перекодировка строки в UTF8 и обратно

Код перекодировки строки в UTF8 и обратно

//Encode NSString to UTF8
+ (NSString *)encode2UTF8:(NSString *)originalStr
{
    NSString *encodedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,(CFStringRef)originalStr,NULL,NULL,kCFStringEncodingUTF8));
    
    return encodedString;
}

//Decode UTF8 NSString
+ (NSString *)decodeFromUTF8:(NSString *)utf8Str
{
    return [utf8Str stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}

21 мар. 2014 г.

Конвертация NSString в массив символов

Один из способов сделать это - просто получить один символ подстроки из заданной полной строки:

NSString *s = @"Hello World";
int i;
NSMutableArray *m = [[NSMutableArray alloc] init];
 
for (i = 0;i < [s length]; i++) {
    [m addObject:[s substringWithRange:NSMakeRange(i, 1)]];
}
 
NSLog([m description]);

20 мар. 2014 г.

Добавление числа в массив / Add number to Array

Обычно в массив типа NSArray или NSMutableArray нельзя добавить простое число или структуру, а только объект. Значит (в нашем примере) преобразуем наше простое число (например int) в объект. Число можно преобразовать как с помощью NSString, так и с помощью NSNumber.

NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:30]; // должен быть мутабельным
 
for (int x = 0; x < 30; x++) {
    // добавить как NSString
    [myArray addObject:[NSString stringWithFormat:@"%d", x]];
 
    // добавить как NSNumber
    [myArray addObject:[NSNumber numberWithInt: x]];
}
 
// результат
NSLog([myArray description]);

Для обоих случаев используемые классы возвращают число как объект.

NSString удаление пробелов в начале и конце текста

Удаление ненужных пробелов по бокам текста:

NSString *string = @" spaces in front and at the end ";
NSString *trimmedString = [string stringByTrimmingCharactersInSet:
                                  [NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSLog(trimmedString)

Хотя такая стандартная задача может выглядеть с чрезмерно большим количеством кода,но при этом Вы получаете множество дополнительных функций для операций с текстом. NSCharacterSet и его набор некоторых методов:

- alphanumericCharacterSet
- capitalizedLetterCharacterSet
- controlCharacterSet
- decimalDigitCharacterSet
- decomposableCharacterSet
- illegalCharacterSet
- letterCharacterSet
- lowercaseLetterCharacterSet
- newlineCharacterSet
- nonBaseCharacterSet
- punctuationCharacterSet
- symbolCharacterSet
- uppercaseLetterCharacterSet
- whitespaceAndNewlineCharacterSet
- whitespaceCharacterSet

14 февр. 2014 г.

NSString - работа со строкой

Класс NSString предоставляет возможность работы с неизменяемой строкой, которая представлена в виде массива символов в кодировке Unicode. Такая строка может быть однажды создана, но не может быть изменена всё время своего существования. Представление строк в виде объектов даёт возможность использовать большое количество методов для обработки строк, а также позволяет использовать строки везде, где можно использовать объекты Objective C. Объекты NSString могут быть легко получены на основе строк языка С, и наоборот, на основе объекта NSString можно получить строку C, заканчивающуюся символом с кодом 0. Для эффективной работы с изменяемыми строками следует пользоваться объектами класса NSMutableString.

Основные методы класса:



НазваниеОписание
uppercaseStringВозвращает строку, полученную из указанной путём перевода букв в верхний регистр
lowercaseStringВозвращает строку, полученную из указанной путём перевода букв в нижний регистр
capitalizedStringВозвращает строку, полученную из указанной путём перевода первых букв всех слов в верхний регистр
isEqualToStringПроверяет равенство двух строк
compareСравнивает две строки
stringWithCStringСоздаёт объект объект NSString на основе стандартной строки языка С
rangeOfStringВозвращает диапазон символов первой указанной строки, в который входит вторая указанная строка
componentsSeparatedByStringВозвращает объект NSArray, содержащий строки, полученные разделением указанной строки указанным строковым разделителем
componentsJoinedByStringВозвращает строку, полученную объединением массива строк
intValueПытается преобразовать строку в целое число и возвращает это число
doubleValueПытается преобразовать строку в число с плавающей запятой и возвращает это число
integerValueПытается преобразовать строку в объект NSInteger и возвращает этот объект
UTF8StringВозвращает строку языка С, полученную из указанного объекта NSString

Примеры использования:


Язык Objective C полностью поддерживает строки языка C. Вы можете в любой момент создать такую строку через указатель, а так же использовать средства языка С для обработки таких строк. Создать простую строку языка С можно так:

char * cString = "Hello world";

Каждая такая строка – это массив букв, который заканчивается символом с кодом 0. Вот ещё один способ создания строки языка С:
char cString[] = "Another string";
Основной недостаток строк в языке С – неудобство работы с ними. Существует много функций для обработки таких строк, но многие из них не так удобны, как хотелось бы и они часто работают напрямую с указателями на символы строк. Это может потенциально привести к ошибкам в работе со строками, поэтому в языке Objective C был предложен новый класс для работы со строками. Класс NSString содержит большое количество удобных и мощных методов для решения многих задач, возникающих при работе со строками. Для того, чтобы воспользоваться в программе объектом строки вовсе необязательно писать сложный код. Можно воспользоваться вот таким способом:
@"A constant Objective C string object";
Если вы хотите вывести объект NSString в консоль, можно воспользоваться форматированным выводом при помощи функции NSLog. В данном случае эта функция будет принимать 2 строки: первая – строка формата, вторая – строка параметра. В строке формата символы %@ будут заменены на строку параметра, после чего результирующая строка будет выведена в консоль.
NSLog (@"%@", @"This is a constant character string object");
Строки, созданные таким образом, являются объектами NSConstantString, который наследует от класса NSString и для них легко можно вызвать различные методы. Например, можно получить длину строки при помощи метода length:
int len = [@"Hello big world!" length];
NSLog (@"Length = %i", len);
Объект NSString позволяет управлять регистром букв в строке для этого есть несколько методов. Например, при помощи метода lowercaseString строку можно преобразовать в нижний регистр:
NSString *lowerStr = [@"SAMPLE STRING" lowercaseString];
NSLog(@"%@", lowerStr);
Строки можно сравнивать между собой, используя метод isEqualToString, который возвращает значение типа BOOL:
NSString *str1 = @"Abcd";
NSString *str2 = @"efghh";
BOOL equal = [str1 isEqualToString:str2];
NSLog(@"Strings is equal? %@", equal? @"YES" : @"NO");
Часто бывает нужно разделить строку на подстроки, используя какую-то разделяющую строку. Для этого достаточно вызвать метод  componentsSeparatedByString, который возвращает массив полученных подстрок. Метод принимает всего один параметр, это и есть разделяющая строка:
NSString *str = @"One, Two, Three";
NSArray *arr = [str componentsSeparatedByString:@", "];
NSLog(@"%@", arr);