2017-06-15 143 views
0

我有一個textview可以接受任何輸入,我需要分別解析引號和雙引號,分別爲'"。所以,如果我在我的文本視圖中輸入文本,如「只是testin'g引號」輸出應該是"Just testin'g quotes"以下是我的解析代碼,它迄今爲止工作正常。解析iOS中的引號和雙引號問題

-(NSString *)parseQuotes:(NSMutableString *)str { 
    [str replaceOccurrencesOfString:@"\"" withString:@""" options:0 range:NSMakeRange(0, [str length])]; 
    [str replaceOccurrencesOfString:@"'" withString:@"'" options:0 range:NSMakeRange(0, [str length])]; 

    return str; 
} 

所以,現在我的問題是,如果我複製粘貼類似下面

「只是testin'g引號」

「只是testin'g引號」

它文本給我一個輸出像

「Just testin’g quotes」 

"Just testin'g quotes" 

請注意第一個不解析,因爲它有引號和dou不同格式的引號。因此,對於這一點,我需要這些新的報價來複制相同的代碼一樣

[str replaceOccurrencesOfString:@"「" withString:@""" options:0 range:NSMakeRange(0, [str length])]; 

    [str replaceOccurrencesOfString:@"」" withString:@""" options:0 range:NSMakeRange(0, [str length])]; 

    [str replaceOccurrencesOfString:@"’" withString:@"'" options:0 range:NSMakeRange(0, [str length])]; 

這工作,但我需要知道,如果這是正確的前進方式是什麼?是否有可能出現不同類型的報價並破壞這些代碼?有沒有更好的替代解決方案,這將適用於所有類型的報價?

+0

https://stackoverflow.com/questions/803676/encode-nsstring-for-xml-html? – Larme

+0

您可能需要用「"」這樣的東西來替換引號。不同的需求會給你不同的需要替換的引號集(你不會在所有可能的UTF字符表中替換各種引用,對嗎?)。你的情況有什麼要求? – toma

+0

@AndrewTomenko,基本上用戶可以在textview中鍵入或粘貼任何類型的內容。所以,我需要處理他們可以粘貼的任何類型的報價。 – Gamerlegend

回答

0

儘管潛在替代品的組合可能會發生變化,但處理此問題的一個好方法是使用componentsSeparatedByCharactersInSet:Here's a good resource替代潛在替代品。

static NSCharacterSet *characterSet = [NSCharacterSet 
    characterSetWithCharactersInString:@"\"''ʺ˝ˮ˶״᳓「」‟″‶〃""]; 
NSString *newStr = [[str componentsSeparatedByCharactersInSet:characterSet] componentsJoinedByString:@"""] 
+0

單引號需要替換爲' – Gamerlegend

0

開始通過定義一個映射:

NSMutableDictionary *mapping = [NSMutableDictionary dictionary]; 
mapping[@"\""] = @"""; 
mapping[@"」"] = @"""; 
... 

for (NSString *key in mapping) { 
    [str replaceOccurrencesOfString:key withString:mapping[key] options:0 range:NSMakeRange(0, [str length])]; 
} 

這是一個易於擴展的解決方案。

而不是使用replaceOccurrencesOfString:withString:您可能只想迭代字符並單獨檢查每個字符以提高性能。

+0

不可變字符串也會更快,但是在這種情況下,應用程序似乎是處理用戶輸入,足夠小以至於任何合理的內容都可以實時運行。 – danh

+0

@danh現在即使長文本也可以快速完成,這完全取決於編號或 – Sulthan

+0

:-)我認爲這是我的觀點 – danh