Удалить символ новой строки из первой строки NSString

Как удалить первый символ \n из NSString?

Изменить: Чтобы уточнить, что я хотел бы сделать, это: Если первая строка строки содержит символ \n, удалите ее, ничего не делайте.

ie: Если строка такая:

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

и выступает против строки, которая не содержит новую строку в первой строке:

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

Я надеюсь, что это станет более ясным.

Ответы

Ответ 1

Это должно сделать трюк:

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];
}

Ответ 2

[string stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]]

будет обрезать вашу строку из любой новой строки, если это вам нужно.

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

сделает именно то, что вы просите, и удалите новую строку, если это первый символ в строке

Ответ 3

Вместо создания 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. Вы автоматически подтверждаете, что там сначала, поэтому вы не просачиваете память.