簡體   English   中英

如何在 Swift 字符串中找到最后一次出現的子字符串?

[英]How do I find the last occurrence of a substring in a Swift string?

在 Objective-C 中,我使用了:

[@"abc def ghi abc def ghi" rangeOfString:@"c" options:NSBackwardsSearch];

但是現在 NSBackWardsSearch 似乎不存在了。 誰能為 Swift 提供等效的代碼?

如果可能的話,我希望能夠在整個字符串中找到字符數。 所以在上面的例子中,它會返回 3。

如果要替換字符串中的最后一個子字符串:

(斯威夫特 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
    }
}

用法:

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

print(result)

// "abc def ghi abc def foo"

或者,如果您想完全刪除最后一個子字符串並清理它:

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

print(result)

// "abc def ghi abc def"

Cocoa 框架應該可以在 Swift 中訪問,但您需要導入它們。 嘗試導入Foundation以訪問 NSString API。 來自“在 Cocoa 和 Objective-C 中使用 Swift”指南的“使用Cocoa 數據類型——字符串”:

Swift 會自動橋接 String 類型和 NSString 類。 [...] 要啟用字符串橋接,只需導入 Foundation。

此外, NSBackwardsSearch是一個枚舉值(標記並作為選項導入),因此您必須使用 Swift 的枚舉/選項語法來訪問它(作為NSStringCompareOptions選項類型的一部分)。 C 枚舉值中去除前綴​​,因此從值名稱中刪除NS

綜合起來,我們有:

import Foundation
"abc def ghi abc def ghi".rangeOfString("c", options:NSStringCompareOptions.BackwardsSearch)

請注意,您可能需要使用distanceadvance功能正常使用的范圍rangeOfString

斯威夫特 3.0:

"abc def ghi abc def ghi".range(of: "c", options: String.CompareOptions.backwards, range: nil, locale: nil)

斯威夫特 5:

"abc def ghi abc def ghi".range(of: "c", options: NSString.CompareOptions.backwards)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM