2012-07-06 29 views

Trả lời

11

Hãy thử điều này:

NSArray *split = [orig componentsSeparatedByCharactersInSet:[NSCharacterSet newlineCharacterSet]]; 
split = [split filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"length > 0"]]; 
NSString *res = [split componentsJoinedByString:@" "]; 

Đây là cách hoạt động:

  • Dòng đầu tiên chia tách bởi ký tự newline
  • dòng thứ hai loại bỏ các mục rỗng chèn vào cho nhiều dải phân cách liên tiếp
  • Thứ ba dòng gia nhập chuỗi lại sử dụng một không gian duy nhất là tách mới
+0

Cảm ơn, chấp nhận câu trả lời của bạn như là đơn giản nhất để có thể đọc. –

0

Sử dụng một biểu thức chính quy, một cái gì đó như "s/\ n +/\ w /" (một thay thế mà sẽ phù hợp với 1 hoặc xuống dòng nhiều nhân vật và thay thế bằng một khoảng trắng duy nhất)

câu hỏi này có link để thư viện regex, nhưng có NSRegularExpression sẵn quá

2

Như Wattson nói bạn có thể làm điều này với NSRegularExpression nhưng mã khá dài nên nếu bạn muốn làm điều này tại một số nơi tôi đề nghị bạn làm một phương pháp trợ giúp hoặc thậm chí một loại NSString với phương pháp như -[NSString stringByReplacingMatchingPattern:withString:] hoặc một cái gì đó tương tự.

NSString *string = @"a\n\na"; 
NSLog(@"%@", [[NSRegularExpression regularExpressionWithPattern:@"\\n+" 
                 options:0 
                  error:NULL] 
       stringByReplacingMatchesInString:string 
       options:0 
       range:NSMakeRange(0, [string length]) 
       withTemplate:@" "]); 
10

3 lần performant vì sử dụng componentsSeparatedByCharactersInSet

NSString *fixed = [original stringByReplacingOccurrencesOfString:@"\\n+" 
                withString:@" " 
                 options:NSRegularExpressionSearch 
                  range:NSMakeRange(0, original.length)]; 

thể mẫu regex thay thế:

  • Thay thế chỉ không gian: [ ]+
  • Thay thế gian và tab: [ \\t]+
  • Thay thế không gian, tab và dòng mới: \\s+
  • Thay thế dòng mới: \\n+
Các vấn đề liên quan