********************************************************************************************************
* *
* *String *NSString *NSMutableString *
* *
********************************************************************************************************
* *
C-style string
"Programming is fun"
Composed of 8-bit chars
NSString object
Composed of 16-bit unichars
@"Programming is fun"
%@ = argument to print NSString class and subclass objects
NSString *str = @"This is a test";
NSLog (@"%@", str);
EVEN MORE METHODS in obj-C book page 326
NSScanner
Take a look at this class if you need to parse strings into tokens
NSString Operations
Uses immutable strings that cannot be changed
Methods are actually creating an entirely new string
More than 100 methods available
They do take a sizable memory if you use too many
Declaring
NSString *str1 = @"This is string A";
NSString *str2 = @"This is string B";
NSString *res;
Declaring with arguments
NSString *query = [NSString stringWithFormat:@"SELECT * FROM user WHERE id = %d", questionNum];
Char count
NSLog (@"Length of str1: %lu", [str1 length]);
Copy string
res = [NSString stringWithString: str1];
Append onto string
str2 = [str1 stringByAppendingString: str2];
Substring
NSString *firstLetter = [answer.text substringToIndex:1];
NSLog([@"1234567890" substringFromIndex:4]); //567890
NSLog([@"1234567890" substringToIndex:6]); //123456
NSLog([@"1234567890" substringWithRange:NSMakeRange(3, 5)]); //45678
Equality test
if ([str1 isEqualToString: res] == YES) {
// str1 = res simple creates new reference to same object in memory
if ([firstLetter isEqualToString: @"A"])
Test if string is <,>,==
NSComparisonResult compareResult;
compareResult = [str1 compare: str2];
if (compareResult == NSOrderedAscending) //NSOrderdSame, NSOrderedDescending
Convert to uppercase
res = [str1 uppercaseString]; //lowercaseString
Convert C string to NSString
[NSString stringWithUTF8String:buf]
NSMutableString
Designed to have characters inside them changed
Some initWithCapacity methods
NSMutableString *mstr;
Create mutable string from non mutable
mstr = [NSMutableString stringWithString: str1];
Insert characters
[mstr insertString: @" mutable" atIndex: 7];
Concatenation (insert at end)
[mstr insertString: @" and string B" atIndex: [mstr length]];
Set directly
[mstr setString: @"This is string A"];
Append directly
[mstr appendString: @" and string C"];
Delete substring based on range
[mstr deleteCharactersInRange: NSMakeRange (16,13)];
Find range first and then use it for deletion
NSRange substr = [mstr rangeOfString: @"string B and "];
if (substr.location != NSNotFound) {
[mstr deleteCharactersInRange: substr];
NSLog (@"%@", mstr);
}
Replace a ranch of characters with another
[mstr replaceCharactersInRAnge: NSMakeRange(8, 8)
withString: @"a mutable string"];
Search and replace
NSString *search = @"This is";
NSString *replace = @"An example of";
substr = [mstr rangeOfString: search];
if (substr.location != NSNotFound) {
[mstr replaceCharactersInRange: substr
withString: replace];
}
Search and replace all occurrences
search = @"a";
replace = @"X";
substr = [mstr rangeOfString: search];
while (substr.location != NSNotFound) {
[mstr replaceCharactersInRange: substr
withString: replace];
substr = [mstr rangeOfString: search];
}
Easy replacement (haven't verified)
// [mstr setString:@""];
// [mstr appendFormat: @" made longer %@.", @"with formating"];