Sty*_*yx1 7 string swift swift-playground
例如,如果我们有这样的情况:
var myString = "Today was a good day"
Run Code Online (Sandbox Code Playgroud)
返回第一个单词的最佳方法是什么,即"今天"?我认为应该应用映射,但不确定如何.
谢谢.
win*_*int 14
我能想到的最简单的方法是
let string = "hello world"
let firstWord = string.components(separatedBy: " ").first
Run Code Online (Sandbox Code Playgroud)
let string = "hello world"
let firstWord = string.componentsSeparatedByString(" ").first
Run Code Online (Sandbox Code Playgroud)
如果您认为需要在代码中使用它,请将其作为一个 extension
extension String {
func firstWord() -> String? {
return self.components(separatedBy: " ").first
}
}
Run Code Online (Sandbox Code Playgroud)
let string = "hello world"
let firstWord = string.firstWord()
Run Code Online (Sandbox Code Playgroud)
您可以使用String Method enumerateSubstrings和options enumerateSubstrings(in: Range<String.Index>)来枚举字符串中的单词,只需获取第一个元素:
Swift 4.2
import Foundation
extension StringProtocol {
var byLines: [SubSequence] { components(separated: .byLines) }
var byWords: [SubSequence] { components(separated: .byWords) }
func components(separated options: String.EnumerationOptions)-> [SubSequence] {
var components: [SubSequence] = []
enumerateSubstrings(in: startIndex..., options: options) { _, range, _, _ in components.append(self[range]) }
return components
}
var firstWord: SubSequence? {
var word: SubSequence?
enumerateSubstrings(in: startIndex..., options: .byWords) { _, range, _, stop in
word = self[range]
stop = true
}
return word
}
var firstLine: SubSequence? {
var line: SubSequence?
enumerateSubstrings(in: startIndex..., options: .byLines) { _, range, _, stop in
line = self[range]
stop = true
}
return line
}
}
Run Code Online (Sandbox Code Playgroud)
游乐场测试:
let string = "• Today was a good day.\n• Tomorrow will be better.\n"
let firstWord = string.firstWord // "Today"
let firstLine = string.firstLine // "• Today was a good day."
let firstLineLastWord = string.firstLine?.byWords.last // day
let firstLineLast2Words = string.firstLine?.byWords.suffix(2) // ["good", "day"]
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用CharacterSet,因为单词可以用空格和标点符号分隔。
var myString = "Today was a good day"
let nonLetters = CharacterSet.letters.inverted
let first = myString.components(separatedBy: nonLetters).first
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2656 次 |
| 最近记录: |