Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSString replace repeated newlines with single newline

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. enter image description here

like image 395
Abdullah Umer Avatar asked Apr 08 '13 09:04

Abdullah Umer


3 Answers

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"];
like image 168
Attila H Avatar answered Oct 16 '22 13:10

Attila H


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

?

like image 4
Md. Ibrahim Hassan Avatar answered Oct 16 '22 13:10

Md. Ibrahim Hassan


You can do it in the following way

NSArray *arrSplit = [s componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]];
                s = [arrSplit componentsJoinedByString:@"\n"];

Hope it may help you..

like image 1
Exploring Avatar answered Oct 16 '22 14:10

Exploring