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)

我可以看看是否执行 stringByReplacingOccurencesOfString 方法......

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 回答
0

NSMutableString您可以从就地修剪换行符,但您需要使用 Core Foundation 的CFStringTrim方法。

目标-C:

NSMutableString *string = [NSMutableString stringWithString:@"\nfoo bar baz\n"];
CFStringTrim((__bridge CFMutableStringRef)string, (__bridge CFStringRef)@"\n");

迅速:

let string = NSMutableString(string: "\nfoo bar baz\n")
CFStringTrim(string as CFMutableString, "\n" as CFString)
于 2017-07-08T23:44:26.100 回答