NSString Quickies
Aus Macwrench
Inhaltsverzeichnis |
Die wichtigsten Format Specifiers
%@ Object %d, %i signed int %u unsigned int %f float/double %.2f float/double mit 2 Nachkommastellen
%x, %X hexadecimal int %o octal int %zu size_t %p pointer %e float/double (in scientific notation) %g float/double (as %f or %e, depending on value) %s C string (bytes) %S C string (unichar) %.*s Pascal string (requires two arguments, pass pstr[0] as the first, pstr+1 as the second) %c character %C unichar
%lld long long %llu unsigned long long %Lf long double
Inhalte verarbeiten
Auf Buchstaben prüfen
Der folgende Codeschnippsel prüft, ob ein NSString ausschließlich aus Buchstaben besteht:
NSCharacterSet* nonAlnumset = [[NSCharacterSet alphanumericCharacterSet] invertedSet]; if ([myString rangeOfCharacterFromSet:alnumset].location != NSNotFound) { NSLog(@"this is not an alphanumeric string"); }
Den in einem CGRect sichtbaren Substring ermitteln
- (NSString*)string:(NSString*)string visibleInRect:(CGRect)rect withFont:(UIFont*)font { NSString *visibleString = @""; for (int i = 1; i <= string.length; i++) { NSString *testString = [string substringToIndex:i]; CGSize stringSize = [testString sizeWithFont:font constrainedToSize:CGSizeMake(rect.size.width,CGFLOAT_MAX)]; if (stringSize.height > rect.size.height || stringSize.width > rect.size.width) { break; } visibleString = testString; } return visibleString; }
Hinweis: Methoden, die auf das UI zugreifen bzw. dieses verändern, müssen zwingend im Main Thread laufen!
MD5-Prüfsumme erstellen
- (NSString *)md5 { return [[self dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO] md5]; }
Die oben verwendete NSData-Methode md5 ist hier zu finden. Alternativ dazu hier eine statische Methode, dazu muss jedoch folgender Header importiert werden:
#import <CommonCrypto/CommonDigest.h> // ... + (NSString *) md5:(NSString *)str { const char *cStr = [str UTF8String]; unsigned char result[16]; CC_MD5( cStr, strlen(cStr), result ); return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X", result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9], result[10], result[11], result[12], result[13], result[14], result[15] ]; }
NSString in URL-Kodierung
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding { return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ", CFStringConvertNSStringEncodingToEncoding(encoding)); }
Konvertieren
In ein NSData Objekt überführen
... geht so:
NSData* myData; myData = [myString dataUsingEncoding: NSASCIIStringEncoding];
... und umgekehrt:
NSString* myString; myString = [[NSString alloc] initWithData:myData encoding:NSASCIIStringEncoding];
Einen formatierten Dezimalwert erstellen
Um beispielsweise aus einer Ganzzahl einen formatierten Dezimalwert mit zwei Nachkommastellen und einem Komma als Trennzeichen zu erstellen, benutzt man am Einfachsten einen den NSNumberFormatter:
NSNumber *myNumber = [NSNumber numberWithFloat:(myInteger/100)]; NSNumberFormatter *nf = [[NSNumberFormatter alloc] init]; [nf setDecimalSeparator:@","]; [nf setMaximumFractionDigits:2]; NSString *myString = [nf stringFromNumber:weight]; [nf release];
Siehe auch
- Apple:
- String Format Specifiers (String Programming Guide for Cocoa)
- Foundation Functions Reference
- NSCharacterSet Class Reference
- CocoaDev: NSString, NSLog, NSData





