2015-05-06 75 views
3

我正在將文本從PDF讀取到NSString。我使用下面的代碼替換所有空格只替換NSString中出現的 n或 r

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

但是,這也消除了段落空格和多行。我只想替換一次\ n或\ r,並保留段落空格或多個製表符和下一行。

+0

我認爲你需要編寫自己的方法來檢查,如果存在的多次出現\ n或\ r並作出相應的反應 –

+0

http://stackoverflow.com/questions/8608346/replace-only-the-first-instance-of-a-substring-in-an-nsstring這可能有幫助 – Vig

+0

你可以告訴我們一個正在處理的文本摘錄以及結果應該是什麼? – Niko

回答

3

有兩種方法:

  1. 執行手動查找循環

你可以得到一個字符串的範圍內-rangeOfCharactersFromSet:options:range:。這種方法的明智之處在於減少每找到匹配的搜索範圍。這樣做可以簡單地將找到的範圍與搜索範圍進行比較。如果找到的範圍是在一開始,它已經是一個雙(或tripple)\r

  • 獲取的各個部件
  • 隨着-componentsSeparatedByCharactersFromSet:NSString)返回與\r分隔的字符串的數組。此陣列中的空字符串是雙(或三)\r。只需用\r替換它們,然後用空格重新加入組件即可。

    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"]; 
    
    +0

    我想替換\ n。爲例如: ħ\ n Ê\ n 升\ n 升\ n ø\ n \ n \ n \ n 瓦特\ n ø\ n r \Ñ 升\ n d 應顯示爲hello和世界,但hello和world應保持它們之間的行數(在這種情況下3) 你好 \ n \ n \ n 世界 –

    +0

    然後修改的正則表達式來尋找只有\ n的一個實例(即不超過一個連續實例),所以只有那些被替換編輯/刪除。例子比比皆是。 –

    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:@""];