我正在阅读从PDF到NSString的文本。我使用下面的代码替换所有空格
NSString *pdfString = convertPDF(path);
pdfString=[pdfString stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
pdfString=[pdfString stringByReplacingOccurrencesOfString:@"\r" withString:@""];
pdfString=[pdfString stringByReplacingOccurrencesOfString:@"\n" withString:@""];
但这也消除了段落空格和多行。我想只替换单个出现的\ n或\ r \ n并保留段落空格或多个制表符和下一行。
答案 0 :(得分:3)
有两种方法:
您可以使用-rangeOfCharactersFromSet:options:range:
获取字符串的范围。这种方法的亮点是通过每次找到的匹配来缩小搜索范围。这样,您只需将找到的范围与搜索范围进行比较即可。如果找到的范围是最开始的,则它是双重(或三重)\r
。
使用-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:@""];