Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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

for instance:

var str = "Hello, Playground!"

to:

var arr = ["Hello","Playground"]

Thank you :)

like image 720
b3rge Avatar asked Jan 09 '15 22:01

b3rge


2 Answers

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"]
like image 169
Leo Dabus Avatar answered Sep 28 '22 04:09

Leo Dabus


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"]
like image 40
CodeBender Avatar answered Sep 28 '22 05:09

CodeBender