2017-06-15 10 views
0

私はどんな入力があってもかまいませんが、引用符と二重引用符をそれぞれ'"として解析する必要があります。だから、もし私が "testin'g quotes"のようなテキストビューにテキストを入力すると、出力は"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、基本的に、ユーザーはテキストビューに任意のタイプのコンテンツを入力または貼り付けることができます。だから、私は彼らが貼り付けることができる任意のタイプの見積もりを処理する必要があります。 – 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