3

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

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

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

4

3 回答 3

3

有两种方法:

  1. 在循环中手动查找

您可以使用 获取字符串的范围-rangeOfCharactersFromSet:options:range:。这种方法的妙处是减少每个找到的匹配项的搜索范围。这样做您可以简单地将找到的范围与搜索范围进行比较。如果找到的范围在最开始,则它是双倍(或三倍)\r

  1. 获取单个组件

With -componentsSeparatedByCharactersFromSet:( NSString) 返回一个数组,其中的字符串用 分隔\r。此数组中的空字符串是双倍(或三倍)\r。只需用 a 替换它们,\r然后用空格重新连接组件。

于 2015-05-06T13:08:38.337 回答
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"];
于 2015-05-06T13:11:19.483 回答
0

你试过正则表达式吗?您只能捕获 an\n单独出现而没有 another\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:@""];
于 2015-05-06T13:24:01.640 回答