NSString和NSMutableString连接

时间:2011-11-22 03:55:21

标签: objective-c ios cocoa-touch concatenation

我有三个字符串(一个NSString,一个NSMutableString和另一个NSString)我需要按顺序连接成一个可变字符串,以显示为一个UIWebView。来自PHP / JavaScript / HTML背景,我对连接的了解非常多:

var concatenatedString = string1 + string2 + string3;

我认为某种东西在Objective-C中不起作用,所以我想知道如何正确地将它们全部拉到一起。

要为此设置一些设置,第一个字符串(NSString)是网页的标题和画布元素,第二个字符串(NSMutableString)是来自文本字段的javascript用户可以定义操作canvas元素,第三个字符串(NSString)是网页的结束标记。

此外,我不应该最初创建NSMutableString,而应该在连接整个内容时将UITextView.text添加到获取用户的文本中,或者我应该从{{1}中提取文本先来?

3 个答案:

答案 0 :(得分:6)

NSMutableString *concatenatedString = [[NSString stringWithFormat:@"%@%@%@", string1, string2, string3] mutableCopy];

答案 1 :(得分:3)

另外两个答案是正确的,因为他们在你问的时候回答了这个问题。但是根据你对你想做的事情的描述,有一种更简单的方法。使用格式。

假设string1string3将始终相同且只有string2会发生变化,这听起来就像你正在做的那样,你可以这样写。

static NSString *formatString = @"String1Text%@String3Text";
NSString *completeString = [NSString stringWithFormat:formatString,self.myTextFieldName.text];
NSLog(@"%@",completeString);

格式中的%@表示按照格式插入对象的说明。(NSString的说明是stringValue。) 假设您有一个名为UITextField的{​​{1}},目前包含文字“myTextFieldName”,那么这将是输出:

'String2Text'

通过这种方式,无论您调用此代码多少次,您只需为整个类创建一个NSString格式的实例。

对我而言,听起来你根本不需要一个可变的字符串。如果我误解了任何内容,请随时发表评论。

对评论的回应:

我不确定你是如何实现'再次测试它的动作'但是,假设你有一个名为'testJavaScript'的按钮。连接到该按钮的IBAction方法将包含前两行。因此,每次按下按钮,都会使新的格式化NSString填充文本字段的当前内容。一旦这个字符串形成,它就无法改变。但是,自下次再创造另一个时,这无关紧要。

答案 2 :(得分:1)

NSString *concatenatedString = [string1 stringByAppendingFormat:@"%@%@", string2, string3];

你可以通过添加mutableCopy使得结果字符串变得可变(如果你真的需要),如@Vinnie在答案中所示。