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

时间:2015-05-06 12:56:39

标签: ios objective-c cocoa pdftotext

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

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

但这也消除了段落空格和多行。我想只替换单个出现的\ n或\ r \ n并保留段落空格或多个制表符和下一行。

3 个答案:

答案 0 :(得分:3)

有两种方法:

  1. 在循环中进行手动查找
  2. 您可以使用-rangeOfCharactersFromSet:options:range:获取字符串的范围。这种方法的亮点是通过每次找到的匹配来缩小搜索范围。这样,您只需将找到的范围与搜索范围进行比较即可。如果找到的范围是最开始的,则它是双重(或三重)\r

    1. 获取各个组件
    2. 使用-componentsSeparatedByCharactersFromSet:NSString)返回一个数组,其中的字符串以\r分隔。此数组中的空字符串是双(或三)\r。只需用\r替换它们,然后用空格重新加入组件。

答案 1 :(得分:1)

您应该使用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"];

答案 2 :(得分:0)

你试过正则表达式吗? 您只能捕获\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:@""];