我正在尝试创建一个字符串(foo2),它将包含fooArray中的所有字符串对象。我不明白为什么下面发布的代码不适合我。
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *foo =@"This is just a test";
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
for(int i=0; i < fooArray.count; i++)
{
_foo2= [_foo2 stringByAppendingString:[ fooArray objectAtIndex:i]];
}
NSLog(_foo2);
}
答案 0 :(得分:0)
我猜是因为你没有在_foo2
运行之前的任何地方初始化viewDidLoad
。由于_foo2尚未初始化并且仍然是一个nil指针,因此每次向其发送stringByAppendingString:
消息时,结果仍为零。
您可以通过在循环之前将_foo2初始化为新的NSMutableString对象来解决此问题。
- (void)viewDidLoad
{
[super viewDidLoad];
NSString *foo =@"This is just a test";
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = [[NSMutableString alloc] init];
for(int i=0; i < fooArray.count; i++)
{
_foo2= [_foo2 stringByAppendingString:[ fooArray objectAtIndex:i]];
}
NSLog(_foo2);
}
答案 1 :(得分:0)
如果您只想从字符串中删除空格,请考虑:
_foo2 = [foo stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
// or whitespaceAndNewlineCharacterSet, if that fits your use case better
如果你想更具体一点,那就是:
_foo2 = [foo stringByReplacingOccurrencesOfString:@" " withString:@""];
或者更密切地关注你正在做的事情的语义,有:
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = [fooArray componentsJoinedByString:@""];
如果由于某种原因你真的想要遍历它(也许是为了对每个单词进行一些处理?),有几种方法可以做到这一点:
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = [NSMutableString string];
for (int i = 0; i < fooArray.count; i++) {
[_foo2 appendString:[fooArray objectAtIndex:i]];
}
或者:
NSArray *fooArray = [foo componentsSeparatedByString:@" "];
_foo2 = @""; // equivalent to [NSString string]
for (int i = 0; i < fooArray.count; i++) {
_foo2 = [_foo2 stringByAppendingString:[fooArray objectAtIndex:i]];
}
(这甚至不考虑快速枚举,也就是for..in
构造。)第一个循环可能更有效,因为我想重复追加到相同的NSMutableString比创建新字符串和抛弃旧字符串更便宜我们一起去。