使用Swift提取字符串中的最后一个单词

sen*_*nty 9 string ios swift

在Swift中提取String中的最后一个单词的方法是什么?因此,如果我有"Lorem ipsum dolor sit amet",请返回"amet".这样做最有效的方法是什么?

Leo*_*bus 22

您可以使用String方法enumerateSubstringsInRange.第一个参数只传递你的String characters.indices和选项.ByWords.只需将每个子字符串附加到最终数组并返回它.

Swift 4或更高版本(对于较旧的Swift语法检查编辑历史记录)

import Foundation

extension StringProtocol { // for Swift 4 you need to add the constrain `where Index == String.Index` 
    var byWords: [SubSequence] {
        var byWords: [SubSequence] = []
        enumerateSubstrings(in: startIndex..., options: .byWords) { _, range, _, _ in
            byWords.append(self[range])
        }
        return byWords
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

let sentence = "Out of this world!!!"
let words = sentence.byWords             // ["Out", "of", "this", "world"]
let firstWord = words.first      // "Out"
let lastWord = words.last         // world"
let first2Words = words.prefix(2) // ["Out", "of"]
let last2Words = words.suffix(2)   // ["this", "world"]
Run Code Online (Sandbox Code Playgroud)

没有import Foundation

清理标点字符

let clean = sentence.filter{ $0.isLetter || $0.isWhitespace }
Run Code Online (Sandbox Code Playgroud)

找到字符串中最后一个空格的索引

if let index = clean.lastIndex(of: " ") {
    let lastWord = clean[index...]
    print(lastWord)   // "world"
}
Run Code Online (Sandbox Code Playgroud)

找到字符串中第一个空格的索引

if let index = clean.firstIndex(of: " ") {
    let firstWord = clean[...index]
    print(firstWord)  // "Out""
}
Run Code Online (Sandbox Code Playgroud)


Col*_*aff 11

如果您想要包含基础课程,其他答案都可以.如果您想使用仅限Swift的类,那么您可以这样做:

一种方法是使用指数.这可能是使用长字符串的最快方法:

斯威夫特4:

let str = "Lorem ipsum dolor sit amet"
let size = str.reversed().firstIndex(of: " ") ?? str.count
let startWord = str.index(str.endIndex, offsetBy: -size)
let last = str[startWord...] // -> "amet"
Run Code Online (Sandbox Code Playgroud)

或者您可以拆分字符串:

斯威夫特4:

let str = "Lorem ipsum dolor sit amet"
let split = str.split(separator: " ")
let last    = String(split.suffix(1).joined(separator: [" "]))
let lastTwo = String(split.suffix(2).joined(separator: [" "]))

print(last)    // -> "amet"
print(lastTwo) // -> "sit amet”
Run Code Online (Sandbox Code Playgroud)

斯威夫特3:

let str = "Lorem ipsum dolor sit amet"
let split = str.characters.split(separator: " ")
let last    = String(split.suffix(1).joined(separator: [" "]))
let lastTwo = String(split.suffix(2).joined(separator: [" "]))

print(last)    // -> "amet"
print(lastTwo) // -> "sit amet”
Run Code Online (Sandbox Code Playgroud)

斯威夫特2:

let str = "Lorem ipsum dolor sit amet"
let split = str.characters.split(Character(" "))
let last    = String(split.suffix(1).joinWithSeparator([" "]))
let lastTwo = String(split.suffix(2).joinWithSeparator([" "]))

print(last)    // -> "amet"
print(lastTwo) // -> "sit amet"
Run Code Online (Sandbox Code Playgroud)


i_a*_*orf 8

我还会考虑使用componentsSeparatedByCharactersInSet和使用空白字符集:

let string = "Lorem ipsum dolor sit amet"
let stringArray = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
print(stringArray.last)
Run Code Online (Sandbox Code Playgroud)


bil*_*p22 7

首先使用componentsSeparatedByString按空格将字符串拆分为数组,然后使用获取数组的最后一个字.last

var string = "Lorem ipsum dolor sit amet"
var stringArr = string.componentsSeparatedByString(" ")

var lastWord = stringArr.last //amet
Run Code Online (Sandbox Code Playgroud)