2009-06-17 61 views
16

如何從NSString刪除第一個\ n字符?從NSString的第一行刪除換行符

編輯:只是爲了澄清,我想要做的是: 如果字符串的第一行包含\ n字符,刪除它,否則什麼也不做。

即:如果字符串是這樣的:

@"\nhello, this is the first line\nthis is the second line" 

和反對不包含在第一行換行的字符串:

@"hello, this is the first line\nthis is the second line." 

我希望這使得它更清晰。

+0

您的編輯實際上使問題不太清楚。從概念上講,「字符串的第一行」,如果有的話,將表示字符串中第一個換行符的所有字符(可能包括)。如果您的意思是「第一行」以外的內容,您可能需要再次澄清。 – 2009-06-17 22:54:28

+0

奎恩說什麼。根據定義,第一行必須包含換行符。否則,字符串只有一行。 – Chuck 2009-06-17 23:04:37

回答

11

這應該做的伎倆:

NSString * ReplaceFirstNewLine(NSString * original) 
{ 
    NSMutableString * newString = [NSMutableString stringWithString:original]; 

    NSRange foundRange = [original rangeOfString:@"\n"]; 
    if (foundRange.location != NSNotFound) 
    { 
     [newString replaceCharactersInRange:foundRange 
           withString:@""]; 
    } 

    return [[newString retain] autorelease]; 
} 
39
[string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]] 

將修剪您的字符串從任何種類的換行符,如果這就是你想要的。

[string stringByReplacingOccurrencesOfString:@"\n" withString:@"" options:0 range:NSMakeRange(0, 1)] 

會做的正是你問什麼,並刪除換行符,如果它是字符串中的第一個字符

+1

選項:nil應該是選項:0 – 2009-06-17 08:24:30

+0

nil == NULL == 0在C++中。 nil == NULL ==(void *)0在C中。NSStringCompareOptions是typedef NSUInteger,它是32位平臺上的32位和64位平臺上的64位。整數文字代替命名常量違揹我的敏感度;) – monowerker 2009-06-17 12:08:04

6

而不是創建的NSMutableString和使用一些保留/釋放呼叫,您只能使用原始字符串並通過使用以下代碼簡化代碼:(需要10.5+)

NSRange foundRange = [original rangeOfString:@"\n"]; 
if (foundRange.location != NSNotFound) 
    [original stringByReplacingOccurrencesOfString:@"\n" 
             withString:@"" 
              options:0 
              range:foundRange]; 

(詳見-stringByReplacingOccurrencesOfString:withString:options:range:。)

最後調用方法調用的IF你自動釋放什麼是那裏第一次這樣你就不會泄漏內存中的結果,甚至可以安全地分配回原來的