追加到 NSString 方法的开头

Posted

技术标签:

【中文标题】追加到 NSString 方法的开头【英文标题】:Append to beginning of NSString method 【发布时间】:2013-01-17 23:04:14 【问题描述】:

我想在 NSString B 前面附加 NSString A。是否有内置方法可以追加到 NSString 的开头而不是 NSString 的结尾?

我知道我可以使用stringWithFormat,但是使用stringWithFormatstringByAppendingString 将文本添加到NSString 的末尾有什么区别?

【问题讨论】:

【参考方案1】:

如果可以追加到字符串的末尾,则可以追加到字符串的开头。

追加

NSString* a = @"A";
NSString* b = @"B";
NSString* result = [a stringByAppendingString:b]; // Prints "AB"

前置

NSString* a = @"A";
NSString* b = @"B";
NSString* result = [b stringByAppendingString:a]; // Prints "BA"

【讨论】:

【参考方案2】:

单线解决方案:

myString = [@"pretext" stringByAppendingString:myString];

【讨论】:

【参考方案3】:

你也可以使用 stringWithFormat:

NSString *A = @"ThisIsStringA";
NSString *B = @"ThisIsStringB";
B = [NSString stringWithFormat:@"%@%@",A,B];

stringByAppendingString 是 NSString 的一个实例方法, stringWithFormat 是 NSString 类的一个类方法。

【讨论】:

instance vs class 对 NSString "B" 有影响吗?使用一个比另一个有什么优势? 你必须学习面向对象的编程,这是基本原理 我知道实例方法和类方法是不同的,但是一旦你使用了 NSString "B" 这对可用性有何影响? 我不太擅长用正确的英语解释它我需要的不仅仅是一本书【参考方案4】:

可能值得指出的是,没有“将一个字符串附加到另一个字符串”这样的事情。 NSString 是不可变的。

在任何情况下,您都是在“创建一个由一个字符串跟随另一个字符串组成的新字符串”。

将新创建的字符串放回同一个变量并不重要。

您永远不会“将文本添加到字符串的末尾”。

【讨论】:

【参考方案5】:

这里我有 Swift 的解决方案:

extension String 

    // Add prefix only, if there is not such prefix into a string
    mutating func addPrefixIfNeeded(_ prefixString: String?) 
        guard let stringValue = prefixString, !self.hasPrefix(stringValue) else 
            return
        
        self = stringValue + self
    


    // Add force full prefix, whether there is already such prefix into a string
    mutating func addPrefix(_ prefixString: String?) 
        guard let stringValue = prefixString else 
            return
        
        self = stringValue + self
    
 

【讨论】:

以上是关于追加到 NSString 方法的开头的主要内容,如果未能解决你的问题,请参考以下文章

NSData类型转换成NSString类型

使用 Nastaleeq Urdu 字体的内容的 HTML 文本到 NSString 转换

iOS基础-NSString及NSMutableString剖析

NSString 格式问题自动追加 \x

在 Perl 中,如何在文件中更改、删除或插入一行,或追加到文件的开头?

在啥情况下 [NSEvent characters] 可以是长度大于 1 的 NSString?