如何在Swift字符串中找到最后一个子字符串?

agf*_*105 16 string substring swift

在Objective-C我用过:

[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];
Run Code Online (Sandbox Code Playgroud)

但现在NSBackWardsSearch似乎不存在.任何人都可以提供Swift的等效代码吗?

如果可能的话,我希望能够在整个字符串中找到字符编号.所以在上面的例子中它将返回3.

out*_*tis 17

Cocoa框架应该可以在Swift中访问,但是你需要导入它们.尝试导入Foundation以访问NSString API.来自" 使用Swift with Cocoa和Objective-C"的"使用Cocoa数据类型 - 字符串 "指南:

Swift自动在String类型和NSString类之间架起桥梁.[...]要启用字符串桥接,只需导入Foundation.

另外,NSBackwardsSearch是一个枚举值(标记并作为选项导入),因此您必须使用Swift的枚举/选项语法来访问它(作为NSStringCompareOptions选项类型的一部分).从C枚举值中删除前缀,因此NS从值名称中删除.

总而言之,我们有:

import Foundation
"abc def ghi abc def ghi".rangeOfString("c", options:NSStringCompareOptions.BackwardsSearch)
Run Code Online (Sandbox Code Playgroud)

请注意,您可能必须使用distanceadvance函数来正确使用范围rangeOfString.


Wom*_*ble 16

如果要替换字符串中的最后一个子字符串:

(斯威夫特3)

extension String
{
    func replacingLastOccurrenceOfString(_ searchString: String,
            with replacementString: String,
            caseInsensitive: Bool = true) -> String
    {
        let options: String.CompareOptions
        if caseInsensitive {
            options = [.backwards, .caseInsensitive]
        } else {
            options = [.backwards]
        }

        if let range = self.range(of: searchString,
                options: options,
                range: nil,
                locale: nil) {

            return self.replacingCharacters(in: range, with: replacementString)
        }
        return self
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let alphabet = "abc def ghi abc def ghi"
let result = alphabet.replacingLastOccurrenceOfString("ghi",
        with: "foo")

print(result)

// "abc def ghi abc def foo"
Run Code Online (Sandbox Code Playgroud)

或者,如果要完全删除最后一个子字符串,并将其清理:

let result = alphabet.replacingLastOccurrenceOfString("ghi",
            with: "").trimmingCharacters(in: .whitespaces)

print(result)

// "abc def ghi abc def"
Run Code Online (Sandbox Code Playgroud)


pha*_*m_2 12

Swift 3.0:

"abc def ghi abc def ghi".range(of: "c", options: String.CompareOptions.backwards, range: nil, locale: nil)
Run Code Online (Sandbox Code Playgroud)