How can I put each word of a string into an array in Swift?

后端 未结 3 672
清歌不尽
清歌不尽 2020-12-19 06:05

Is it possible to put each word of a string into an array in Swift?

for instance:

var str = \"Hello, Playground!\"

to:



        
相关标签:
3条回答
  • 2020-12-19 06:16

    edit/update:

    Xcode 10.2 • Swift 5 or later

    We can extend StringProtocol using collection split method

    func split(maxSplits: Int = Int.max, omittingEmptySubsequences: Bool = true, whereSeparator isSeparator: (Character) throws -> Bool) rethrows -> [Self.SubSequence]
    

    setting omittingEmptySubsequences to true and passing a closure as predicate. We can also take advantage of the new Character property isLetter to split the string.

    extension StringProtocol {
        var words: [SubSequence] {
            return split { !$0.isLetter }
        }
    }
    

    let sentence = "• Hello, Playground!"
    let words = sentence.words // ["Hello", "Playground"]
    
    0 讨论(0)
  • 2020-12-19 06:29

    Neither answer currently works with Swift 4, but the following can cover OP's issue & hopefully yours.

    extension String {
        var wordList: [String] {
            return components(separatedBy: CharacterSet.alphanumerics.inverted).filter { !$0.isEmpty }
        }
    }
    
    let string = "Hello, Playground!"
    let stringArray = string.wordList
    print(stringArray) // ["Hello", "Playground"]
    

    And with a longer phrase with numbers and a double 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"]
    
    0 讨论(0)
  • 2020-12-19 06:34

    That last solution (from Leo) will create empty elements in the array when there are multiple consecutive spaces in the string. It will also combine words separated by "-" and process end of line characters as words.

    This one won't :

    extension String 
    {    
        var wordList: [String] 
        {
           return componentsSeparatedByCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet).filter({$0 != ""})
        }
    }
    
    0 讨论(0)
提交回复
热议问题