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方法......
答案 0 :(得分: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
的第一个外观的范围。效果只会发生\n
一次。
stringBy...
方法用于不可变字符串。他们不会修改输入字符串。相反,它们会创建不可变字符串的副本并返回修改后的副本。
答案 1 :(得分:4)
这是因为方法stringByTrimmingCharactersInSet:
返回一个新字符串而不是修改当前字符串。
NSString* trimmedString = [b64String stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];
答案 2 :(得分: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)