//1、创建常量字符串。
//2、创建空字符串,给予赋值。
//3、在以上方法中,提升速度:initWithString方法
//4、用标准c创建字符串:initWithCString方法
//不考虑大 小写比较字符串1
//如何判断字符串为空
NSString *urlString = [urlInput stringValue];
if (!urlString) {
NSLog( @”NO INPUT.” );
} else {
if ([urlString length] == 0 ) {
NSLog( @”NO INPUT.” );
} else {
}
}
}
Convert NSString to int
1 NSString *aNumberString = @"123";
2 int i = [aNumberString intValue];
/////////////////////////////////////////////////
use @"abc" to mean NSString
ex: NSString *str = @"Hello";
use content of file to create NSString
ex: NSString *str = [NSString stringWithContentsOfFile
use c characters to create NSString
ex: char *cStr="hello";
NSString *str = [NSString stringWithCString: cStr]
get length of NSString
ex: unsigned int strLen = [str length]
append on NSString to another
ex: NSString *str = @"Hello";
NSString *str2 = [str stringByAppendingString: @"abc"]
append a format:
ex: NSString *str3 = [str2 stringByAppendingFormat: @"%d", 2003]
search for subString:
ex: NSRange loc = [str rangeOfString:@"The"]
what is NSRange:
typedef struct _NSRange{
unsigned int location;
unsigned int length;
}NSRange;
breaking a string into components:
ex: NSArray *fields = [str componentsSeperatedByStr
create NSMutableString from NSString:
ex: NSString *str = @"hello";
NSMutableString *ms = [NSMutableString stringWithString: str];
/////////////////////////////////////////////////
1 合并一个字符串数组到单个字符串。
- NSArray *chunks = ... get an array, say by splitting it;
-
string = [chunks componentsJoinedByString
: @" :-) "];
输出结果如下:
- oop :-) ack :-) bork :-) greeble :-) ponies
2 将一个字符串分割成数组
- NSString *string = @"oop:ack:bork:greeble:ponies";
-
NSArray *chunks
= [string componentsSeparatedByStr
ing : @":"];
3 将字符串转换成整型数
- NSString *string = ...;
- int value = [string intValue];
同样NSString也有floatValue和doubleValue的方法。
4 遍历属性字符串(Attributed string)中的属性
如下函数可以打印出输入的属性字符串中的所有属性
-
- (void) iterateAttributesForStri
ng: (NSAttributedString *) string - {
- NSDictionary *attributeDict;
- NSRange effectiveRange = { 0, 0 };
- do {
- NSRange range;
- range = NSMakeRange (NSMaxRange(effectiveRange),
- [string length] - NSMaxRange(effectiveRange));
- attributeDict = [string attributesAtIndex: range.location
- longestEffectiveRange: &effectiveRange
- inRange: range];
- NSLog (@"Range: %@ Attributes: %@",
- NSStringFromRange(effectiveRange), attributeDict);
- } while (NSMaxRange(effectiveRange) < [string length]);
- }
5 制作本地化的字符串
你需要在English.lproj目录(或其他合适的本地化目录)中有一个名为Localizable.strings的文件。它有如下的语法:
- "BorkDown" = "BorkDown";
- "Start Timer" = "Start Timer";
- "Stop Timer" = "Stop Timer";
也就是,每个键值都有一个本地化的值。
在代码中,可以使用NSLocalizedString()或其变种。
- [statusItem setTitle: NSLocalizedString(@"BorkDown", nil)];
其中该函数忽略了第二个参数。
6 无多余信息的NSLog
NSlog在日志行之前输出了太多无关信息。对于一个用于输出的基础工具,它确实有点碍事。不过我仍然和喜欢printf()系列所不能的%@展开替换。如下是可以实现该功能的代码:
- #include <stdarg.h>
- void LogIt (NSString *format, ...)
- {
- va_list args;
- va_start (args, format);
- NSString *string;
- string = [[NSString alloc] initWithFormat: format arguments: args];
- va_end (args);
- printf ("%sn", [string cString]);
- [string release];
- }
7 在属性字符串中加入图片
我们需要使用一个文本附件:
- - (NSAttributedString *) prettyName
- {
- NSTextAttachment *attachment;
- attachment = [[[NSTextAttachment alloc] init] autorelease];
- NSCell *cell = [attachment attachmentCell];
- NSImage *icon = [self icon]; // or wherever you are getting your image
- [cell setImage: icon];
- NSString *name = [self name];
- NSAttributedString *attrname;
- attrname = [[NSAttributedString alloc] initWithString: name];
-
NSMutableAttributedStrin
g *prettyName; -
prettyName
= (id)[NSMutableAttributedStrin
g attributedStringWithAtta chment: - attachment]; // cast to quiet compiler warning
- [prettyName appendAttributedString: attrname];
- return (prettyName);
- }
这样就可以在字符串前面加入图片。如果需要在字符串中加入图片就需要创建通过附件创建一个属性字符串,然后将其加入到最终的属性字符串中。
8 除去字符串中的换行符
假定有一个字符串,你想除去换行符。你可以像脚本语言一样进行一个分割/合并操作,或者制作一个可变的拷贝并进行处理:
- NSMutableString *mstring = [NSMutableString stringWithString:string];
- NSRange wholeShebang = NSMakeRange(0, [mstring length]);
-
[mstring replaceOccurrencesOfStri
ng : @" - withString: @""
- options: 0
- range: wholeShebang];
- return [NSString stringWithString: mstring];
(这也可用于通用的字符串操作,不仅经是除去换行符)
该方法比分割/合并至少省一半的时间。当然可能结果不会造成太多的不同。在一个简单的测试中,处理一个1.5兆文件中36909个新行,分割/合并操作花费了0.124秒,而上述方法仅需0.071秒。
9 字串匹配
- NSRange range = [[string name] rangeOfString: otherString options: NSCaseInsensitiveSearch];
10 今天日期的字符串
将一个日期转换成字符串的通用方法就是通过NSDateFormatter。有时你想生成一个格式比较友好的日期字符串。比如你需要"December
4, 2007",这种情况下就可以使用:
-
[[NSDate date] descriptionWithCalendarF
ormat : @"%B %e, %Y" timeZone: nil locale: nil]
(感谢Mike Morton提供该方法)
11 除去字符串末尾的空格
- NSString *ook = @"n tt hello there tn nn";
- NSString *trimmed =
-
[ook stringByTrimmingCharacte
rsInSet : -
[NSCharacterSet
whitespaceAndNewlineChar
acterSet]]; - NSLog(@"trimmed: '%@'", trimmed);
输出结果是:
2009-12-24 18:24:42.431 trim[6799:903] trimmed: 'hello there'
图形
1 绘制一个粗体字符串
- - (void) drawLabel: (NSString *) label
- atPoint: (NSPoint) point
- bold: (BOOL) bold {
- NSMutableDictionary *attributes = [NSMutableDictionary dictionary];
- NSFont *currentFont = [NSFont userFontOfSize: 14.0];
- if (bold) {
- NSFontManager *fm = [NSFontManager sharedFontManager];
- NSFont *boldFont = [fm convertFont: currentFont
- toHaveTrait: NSBoldFontMask];
- [attributes setObject: boldFont
- forKey: NSFontAttributeName];
- } else {
- [attributes setObject: currentFont
- forKey: NSFontAttributeName];
- }
- [label drawAtPoint: point withAttributes: attributes];;
- }