我正在阅读从PDF到NSSTRING的文本。我使用下面的代码替换所有空格
NSString *pdfString = convertPDF(path);
pdfString=[pdfString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
pdfString=[pdfString stringByReplacingOccurrencesOfString:@"r" withString:@""];
pdfString=[pdfString stringByReplacingOccurrencesOfString:@"n" withString:@""];
,但这也消除了段落空间和多行。我想仅替换 n或 r的一次出现,并保留段落空间或多个标签和下一行。
有两种方法:
- 在循环中进行手册查找
您可以获取带有-rangeOfCharactersFromSet:options:range:
的字符串范围。这种方法的珍珠是在每次发现的比赛中减少搜索范围。这样做您可以简单地将发现的范围与搜索范围进行比较。如果发现的范围是一开始,则它是双重(或tripple)r
。
- 获取单个组件
使用-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:@""];