我有三个字符串(一个NSString
,一个NSMutableString
和另一个NSString
)我需要按顺序连接成一个可变字符串,以显示为一个UIWebView。来自PHP / JavaScript / HTML背景,我对连接的了解非常多:
var concatenatedString = string1 + string2 + string3;
我认为某种东西在Objective-C中不起作用,所以我想知道如何正确地将它们全部拉到一起。
要为此设置一些设置,第一个字符串(NSString
)是网页的标题和画布元素,第二个字符串(NSMutableString
)是来自文本字段的javascript用户可以定义操作canvas元素,第三个字符串(NSString
)是网页的结束标记。
此外,我不应该最初创建NSMutableString
,而应该在连接整个内容时将UITextView.text
添加到获取用户的文本中,或者我应该从{{1}中提取文本先来?
答案 0 :(得分:6)
NSMutableString *concatenatedString = [[NSString stringWithFormat:@"%@%@%@", string1, string2, string3] mutableCopy];
答案 1 :(得分:3)
另外两个答案是正确的,因为他们在你问的时候回答了这个问题。但是根据你对你想做的事情的描述,有一种更简单的方法。使用格式。
假设string1
和string3
将始终相同且只有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在答案中所示。