天天看点

[转载]NSString常用操作

字符串的使用

//1、创建常量字符串。

    NSString *astring = @"This is a String!";

//2、创建空字符串,给予赋值。

    NSString *astring = [[NSString alloc] init];

    astring = @"This is a String!";

    NSLog(@"astring:%@",astring);

  [astring release];

//3、在以上方法中,提升速度:initWithString方法

    NSString *astring = [[NSString alloc] initWithString:@"This is a String!"];

    [astring release];

//4、用标准c创建字符串:initWithCString方法

    char *Cstring = "This is a String!";

    NSString *astring = [[NSString alloc] initWithCString:Cstring];

    //5、创建格式化字符串:占位符(由一个%加一个字符组成)

    int i = 1;

    int j = 2;

    NSString *astring = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%d.This is %i string!",i,j]];

    //6、创建临时字符串

    NSString *astring;

    astring = [NSString stringWithCString:"This is a temporary string"];

    NSString *path = @"astring.text";

    NSString *astring = [[NSString alloc] initWithContentsOfFile:path];

    NSString *path = @"astring.text";   

    [astring writeToFile: path atomically: YES];

    //用C比较:strcmp函数

    char string1[] = "string!";

    char string2[] = "string!";

    if(strcmp(string1, string2) = = 0)

    {

        NSLog(@"1");

    }

   //isEqualToString方法   

    NSString *astring01 = @"This is a String!";

    NSString *astring02 = @"This is a String!";

    BOOL result = [astring01 isEqualToString:astring02];

    NSLog(@"result:%d",result);

   //compare方法(comparer返回的三种值)   

    NSString *astring02 = @"This is a String!";   

    BOOL result = [astring01 compare:astring02] = = NSOrderedSame;   

    NSLog(@"result:%d",result);   

    //NSOrderedSame 判断两者内容是否相同

    NSString *astring02 = @"this is a String!";

    BOOL result = [astring01 compare:astring02] = = NSOrderedAscending;   

    //NSOrderedAscending 判断两对象值的大小(按字母顺序进行比较,astring02大于astring01为真)

    NSString *astring01 = @"this is a String!";

    BOOL result = [astring01 compare:astring02] = = NSOrderedDescending;   

    NSLog(@"result:%d",result);    

    //NSOrderedDescending 判断两对象值的大小(按字母顺序进行比较,astring02小于astring01为真)

//不考虑大 小写比较字符串1

    BOOL result = [astring01 caseInsensitiveCompare:astring02] = = NSOrderedSame;   

    //NSOrderedDescending判断两对象值的大小(按字母顺序进行比较,astring02小于astring01为真)

//如何判断字符串为空

NSString *urlString = [urlInput stringValue];

if (!urlString) {

NSLog( @”NO INPUT.” );

} else {

if ([urlString length] == 0 ) {

}

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:@"/path/to/file"]

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

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 componentsSeperatedByString:@"abc"];

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 componentsSeparatedByString: @":"];

3 将字符串转换成整型数

NSString *string = ...;

int value = [string intValue];

同样NSString也有floatValue和doubleValue的方法。

4 遍历属性字符串(Attributed string)中的属性

如下函数可以打印出输入的属性字符串中的所有属性

- (void) iterateAttributesForString: (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];

NSMutableAttributedString *prettyName;

prettyName = (id)[NSMutableAttributedString attributedStringWithAttachment:

attachment]; // cast to quiet compiler warning

[prettyName appendAttributedString: attrname];

return (prettyName);

这样就可以在字符串前面加入图片。如果需要在字符串中加入图片就需要创建通过附件创建一个属性字符串,然后将其加入到最终的属性字符串中。

8 除去字符串中的换行符

假定有一个字符串,你想除去换行符。你可以像脚本语言一样进行一个分割/合并操作,或者制作一个可变的拷贝并进行处理:

NSMutableString *mstring = [NSMutableString stringWithString:string];

NSRange wholeShebang = NSMakeRange(0, [mstring length]);

[mstring replaceOccurrencesOfString: @"

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] descriptionWithCalendarFormat: @"%B %e, %Y" timeZone: nil locale: nil]

(感谢Mike Morton提供该方法)

11 除去字符串末尾的空格

NSString *ook = @"n tt hello there tn nn";

NSString *trimmed =

[ook stringByTrimmingCharactersInSet:

[NSCharacterSet whitespaceAndNewlineCharacterSet]];

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];

[attributes setObject: currentFont

[label drawAtPoint: point withAttributes: attributes];;