0

ねえ、私の人生では、これは機能していません:..

NSMutableString *b64String = [[[NSMutableString alloc] initWithFormat:@"Basic %@", [string _base64Encoding:string]] autorelease];

    [b64String stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
    NSLog(@"(%@)", b64String);

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

私がSOで見つけたこれらの方法は両方とも、うまくいかないようです...私は何かひどく間違ったことをしなければなりません。しかし、NSLog を中断すると、文字列に "\n" がはっきりと表示されます (デバッガーとコンソール出力)。

また、これは真実です:

if (foundRange.location != NSNotFound)

そして、stringByReplaceingOccurencesOfString メソッドを実行するかどうかを確認できます...

4

3 に答える 3

4

電話するだけ

b64String = [b64String stringByReplacingOccurrencesOfString:@"\n" withString:@""]

-releaseで十分です (の不要なコピーを忘れないでb64stringください。別の変数に格納することもできます)。または、実際の可変メソッドを全範囲で使用します。

[b64String replaceOccurrencesOfString:@"\n" withString:@"" options:0 range:NSMakeRange(0, [b64String length])];

では-stringByReplacingOccurrencesOfString:withString:options:range:rangeパラメータは置換が発生する範囲を指定します。つまり、範囲外では何も置き換えられません。コードでは、最初に出現する の範囲を渡します\n。効果は1回のみ\n解除されます。

メソッドはstringBy...不変文字列用です。入力文字列は変更されません。代わりに、不変文字列のコピーを作成し、変更されたコピーを返します。

于 2010-01-23T06:05:40.537 に答える
4

これは、メソッドstringByTrimmingCharactersInSet:が現在の文字列を変更するのではなく、新しい文字列を返すためです。

NSString* trimmedString = [b64String stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
于 2010-01-23T06:06:34.043 に答える