在NSString中仅替换 n或 r的单个出现



我正在阅读从PDF到NSSTRING的文本。我使用下面的代码替换所有空格

NSString *pdfString = convertPDF(path);
    pdfString=[pdfString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
    pdfString=[pdfString stringByReplacingOccurrencesOfString:@"r" withString:@""];
    pdfString=[pdfString stringByReplacingOccurrencesOfString:@"n" withString:@""];

,但这也消除了段落空间和多行。我想仅替换 n或 r的一次出现,并保留段落空间或多个标签和下一行。

有两种方法:

  1. 在循环中进行手册查找

您可以获取带有-rangeOfCharactersFromSet:options:range:的字符串范围。这种方法的珍珠是在每次发现的比赛中减少搜索范围。这样做您可以简单地将发现的范围与搜索范围进行比较。如果发现的范围是一开始,则它是双重(或tripple)r

  1. 获取单个组件

使用-componentsSeparatedByCharactersFromSet:NSString)返回带有r的字符串的数组。此数组中的空字符串为双(或三重)r。只需用r替换它们,然后用空间重新加入组件。

您应该使用nsregularexpression执行此操作

NSString *pdfString = convertPDF(path);
//Replace all occurrences of n by a single n
NSRegularExpression *regexN = [NSRegularExpression regularExpressionWithPattern:@"n" options:0 error:NULL];
pdfString = [regexN stringByReplacingMatchesInString:pdfString options:0 range:NSMakeRange(0, [pdfString length]) withTemplate:@"n"];
//Replace all occurrences of r by a single r
NSRegularExpression *regexR = [NSRegularExpression regularExpressionWithPattern:@"r" options:0 error:NULL];
pdfString = [regexR stringByReplacingMatchesInString:pdfString options:0 range:NSMakeRange(0, [pdfString length]) withTemplate:@"r"];

您是否尝试过Regex?您只能捕获n在没有其他n的情况下单独出现的出现,然后用空字符串替换这些出现:

NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"[^n]([n])[^n];" options:0 error:&error];
NSString *modifiedString = [regex stringByReplacingMatchesInString:string options:0 range:NSMakeRange(0, [string length]) withTemplate:@""];

相关内容

  • 没有找到相关文章

最新更新