Reputation: 4644
I have an NSString
which can have multiple \n in between the string. I need to replace the multiple occurrence of \n's with a single \n.
I tried this code:
newString = [string stringByReplacingOccurrencesOfString:@"\n\n" withString:@"\n"];
But this does not give the desired result if a series of "\n\n\n\n\n\n" is encountered in the string. In this case, they will be replaced with "\n\n\n".
What should I do so that all more than one "\n"s be replaced with single "\n"?
Thanks to all!
Update: Adding a screenshot for UITextView
to which the filtered string is set as text. The new lines seem to be more than one after writing code as suggested by Attila H in answer.
Upvotes: 5
Views: 2521
Reputation: 5477
For anyone looking for an Updated Swift 4 Answer:
extension String {
func removeMultipleNewlinesFromMiddle() -> String {
let returnString = trimmedString.replacingOccurrences(of: "\n+", with: "\n", options: .regularExpression, range: nil)
return (returnString)
}
}
Usage :
let str = "Hello \n\n\nWorld \n\nHow are you\n?"
print (str.removeMultipleNewlinesFromMiddle())
Output :
Hello
World
How are you
?
Upvotes: 3
Reputation: 3606
You might use NSRegularExpression. This is the most simple and elegant way:
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\n+" options:0 error:NULL];
NSString *newString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@"\n"];
Upvotes: 16
Reputation: 935
You can do it in the following way
NSArray *arrSplit = [s componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
s = [arrSplit componentsJoinedByString:@"\n"];
Hope it may help you..
Upvotes: 1