如何将字符串的每个单词放入 Swift 中的数组?
How can I put each word of a string into an array in Swift?
是否可以将字符串的每个单词放入Swift中的数组?
例如:
var str = "Hello, Playground!"
至:
var arr = ["Hello","Playground"]
谢谢:)
edit/update:
Xcode 10.2 • Swift 5 或更高
我们可以使用集合拆分方法
扩展 StringProtocol
func split(maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Character) throws -> Bool) rethrows -> [Self.SubSequence]
将 omittingEmptySubsequences
设置为 true 并将闭包作为谓词传递。我们还可以利用新的 Character
属性 isLetter
来拆分字符串。
extension StringProtocol {
var words: [SubSequence] {
return split { ![=11=].isLetter }
}
}
let sentence = "• Hello, Playground!"
let words = sentence.words // ["Hello", "Playground"]
当字符串中有多个连续空格时,最后一个解决方案(来自 Leo)将在数组中创建空元素。它还会合并由“-”分隔的单词,并将行尾字符作为单词处理。
这个不会:
extension String
{
var wordList: [String]
{
return componentsSeparatedByCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet).filter({[=10=] != ""})
}
}
目前这两个答案都不适用于 Swift 4,但以下内容可以解决 OP 的问题,希望也能解决您的问题。
extension String {
var wordList: [String] {
return components(separatedBy: CharacterSet.alphanumerics.inverted).filter { ![=10=].isEmpty }
}
}
let string = "Hello, Playground!"
let stringArray = string.wordList
print(stringArray) // ["Hello", "Playground"]
还有一个带有数字和双字的较长短语 space:
let biggerString = "Hello, Playground! This is a very long sentence with 123 and other stuff in it"
let biggerStringArray = biggerString.wordList
print(biggerStringArray)
// ["Hello", "Playground", "This", "is", "a", "very", "long", "sentence", "with", "123", "and", "other", "stuff", "in", "it"]
是否可以将字符串的每个单词放入Swift中的数组?
例如:
var str = "Hello, Playground!"
至:
var arr = ["Hello","Playground"]
谢谢:)
edit/update:
Xcode 10.2 • Swift 5 或更高
我们可以使用集合拆分方法
扩展StringProtocol
func split(maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Character) throws -> Bool) rethrows -> [Self.SubSequence]
将 omittingEmptySubsequences
设置为 true 并将闭包作为谓词传递。我们还可以利用新的 Character
属性 isLetter
来拆分字符串。
extension StringProtocol {
var words: [SubSequence] {
return split { ![=11=].isLetter }
}
}
let sentence = "• Hello, Playground!"
let words = sentence.words // ["Hello", "Playground"]
当字符串中有多个连续空格时,最后一个解决方案(来自 Leo)将在数组中创建空元素。它还会合并由“-”分隔的单词,并将行尾字符作为单词处理。
这个不会:
extension String
{
var wordList: [String]
{
return componentsSeparatedByCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet).filter({[=10=] != ""})
}
}
目前这两个答案都不适用于 Swift 4,但以下内容可以解决 OP 的问题,希望也能解决您的问题。
extension String {
var wordList: [String] {
return components(separatedBy: CharacterSet.alphanumerics.inverted).filter { ![=10=].isEmpty }
}
}
let string = "Hello, Playground!"
let stringArray = string.wordList
print(stringArray) // ["Hello", "Playground"]
还有一个带有数字和双字的较长短语 space:
let biggerString = "Hello, Playground! This is a very long sentence with 123 and other stuff in it"
let biggerStringArray = biggerString.wordList
print(biggerStringArray)
// ["Hello", "Playground", "This", "is", "a", "very", "long", "sentence", "with", "123", "and", "other", "stuff", "in", "it"]