【问题标题】:Cannot strip newline from Cocoa NSMutableString无法从 Cocoa NSMutableString 中删除换行符
【发布时间】:2011-01-08 12:03:19
【问题描述】:

嘿,这对我来说是行不通的:..

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 方法...

【问题讨论】:

  • 你的意思是一个 Cocoa NSMutableString。 Objective-C 是语言; NSMutableString 来自 Cocoa 框架。您的问题在另一种语言(例如 Ruby 或 Python)中不会有太大不同,但它与另一种框架(例如 .NET 或 Python 标准库)完全无关。
  • 感谢彼得的更正。更新了 OP。

标签: objective-c cocoa nsstring newline nsmutablestring


【解决方案1】:

只需调用

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 仅出现 1 次。

stringBy... 方法用于不可变字符串。他们不会修改输入字符串。相反,它们会创建不可变字符串的副本并返回修改后的副本。

【讨论】:

  • 不起作用 - [b64String stringByReplacingOccurrencesOfString:@"\n" withString:@""]; NSLog(@"(%@)", b64String); “\n”仍然存在...
  • @Mr-sk:查看更新。您的stringByTrimmingCharactersInSet: 也有问题,请参阅其他答案。
【解决方案2】:

这是因为 stringByTrimmingCharactersInSet: 方法返回一个新字符串,而不是修改当前字符串。

NSString* trimmedString = [b64String stringByTrimmingCharactersInSet:[NSCharacterSet newlineCharacterSet]];

【讨论】:

  • 噢!谢谢大家-应该放慢一点阅读速度。呵呵
【解决方案3】:

您可以从 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 2011-05-24
    • 2019-03-29
    相关资源
    最近更新 更多