bremmm
bremmm

Reputation: 43

Swift: Separate String into String Array and Append Separator

How would I split a string to include the separators?

Lets say I had a string such as...

let myString = "apple banana orange grapes"

If I used

let separatedString = myString.componentsSeparatedByString(" ")

my resulting array would be

["apple","banana","orange","grapes"]

How would I achieve a result of

["apple ","banana ","orange ","grapes"]

Upvotes: 2

Views: 1698

Answers (3)

Luca Angeletti
Luca Angeletti

Reputation: 59496

Solution

Since you updated your question, it looks now you no longer want a new space on the last word.

So here's my updated code

let text = "apple banana orange grapes"

let chunks: [String] = text
    .componentsSeparatedByString(" ")
    .reverse()
    .enumerate()
    .map { $0.element + ( $0.index == 0 ? "" : " ") }
    .reverse()

print(chunks) // ["apple ", "banana ", "orange ", "grapes"]

Multiple separators

Thank to @vadian for the suggestion

let text = "apple banana\norange grapes"

let chunks: [String] = text
    .componentsSeparatedByCharactersInSet(.whitespaceAndNewlineCharacterSet())
    .reverse()
    .enumerate()
    .map { $0.element + ( $0.index == 0 ? "" : " ") }
    .reverse()

print(chunks) // ["apple ", "banana ", "orange ", "grapes"]

Upvotes: 1

vadian
vadian

Reputation: 285069

Alternative using regular expression:

let myString = "apple banana orange grapes"
let pattern = "\\w+\\s?"
let regex  = try! NSRegularExpression(pattern: pattern, options: [])
let matches = regex.matchesInString(myString, options:[], range: NSMakeRange(0, myString.characters.count))
  .map { (myString as NSString).substringWithRange($0.range)}
print(matches) // -> ["apple ", "banana ", "orange ", "grapes"]

Upvotes: 1

Alex Wayne
Alex Wayne

Reputation: 187004

array.map lets you process the resulting array an add the space back in.

let separatedString = myString
  .componentsSeparatedByString(" ")
  .map { "\($0) " }

That last line iterates over all strings in the split up array and puts them in $0, and returns a new string with the space added back in which gets used as the replacement for the original string.

Upvotes: 2

Related Questions