For everyone who came here, looking for a similar question in Swift: Perhaps a cleaner (addition to Sankalp), and a more “Swifty” approach:
func addSpaces(to givenString: String) -> String{ var string = givenString //indexOffset is needed because each time replaceSubrange is called, the resulting count is incremented by one (owing to the fact that a space is added to every capitalised letter) var indexOffset = 0 for (index, character) in string.characters.enumerated(){ let stringCharacter = String(character) //Evaluates to true if the character is a capital letter if stringCharacter.lowercased() != stringCharacter{ guard index != 0 else { continue } //"ILoveSwift" should not turn into " I Love Swift" let stringIndex = string.index(string.startIndex, offsetBy: index + indexOffset) let endStringIndex = string.index(string.startIndex, offsetBy: index + 1 + indexOffset) let range = stringIndex..<endStringIndex indexOffset += 1 string.replaceSubrange(range, with: " \(stringCharacter)") } } return string }
You call the function as follows:
var string = "iLoveSwiftCode" addSpaces(to: string)
Alternatively, if you prefer extensions:
extension String{ mutating func seperatedWithSpaces(){ //indexOffset is needed because each time replaceSubrange is called, the resulting count is incremented by one (owing to the fact that a space is added to every capitalised letter) var indexOffset = 0 for (index, character) in characters.enumerated(){ let stringCharacter = String(character) if stringCharacter.lowercased() != stringCharacter{ guard index != 0 else { continue } //"ILoveSwift" should not turn into " I Love Swift" let stringIndex = self.index(self.startIndex, offsetBy: index + indexOffset) let endStringIndex = self.index(self.startIndex, offsetBy: index + 1 + indexOffset) let range = stringIndex..<endStringIndex indexOffset += 1 self.replaceSubrange(range, with: " \(stringCharacter)") } } } }
Call the method from the line:
var string = "iLoveSwiftCode" string.seperatedWithSpaces()
Mayur
source share