在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)
我还会考虑使用componentsSeparatedByCharactersInSet和使用空白字符集:
let string = "Lorem ipsum dolor sit amet"
let stringArray = string.componentsSeparatedByCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
print(stringArray.last)
Run Code Online (Sandbox Code Playgroud)
首先使用componentsSeparatedByString按空格将字符串拆分为数组,然后使用获取数组的最后一个字.last
var string = "Lorem ipsum dolor sit amet"
var stringArr = string.componentsSeparatedByString(" ")
var lastWord = stringArr.last //amet
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7068 次 |
| 最近记录: |