0

私は、英語のテキストを(UITextViewへのユーザー入力として)受け取り、(ボタンを押すだけで)特定の単語を別の単語に置き換える翻訳者に取り組んでいます。私はスコープ内の英語の単語とそれらの代替語の両方を別々の配列(englishArrayとalternativeArray)に持っており、それに応じてインデックスが付けられています。

私の課題は、<"、。()>などの文字を無視して入力テキスト(UITextView)内の単語を識別し、englishArray(大文字と小文字を区別しない)で単語を検索し、alternativeArrayで対応する単語を検索できるアルゴリズムを見つけることです。次に、元の単語の代わりにその単語を使用します。UITextViewに書き戻します。

どんな助けでも大歓迎です。

NB。indexOfCaseInsensitiveStringメソッドを使用してNSArray機能を拡張するカテゴリを作成しました。このメソッドは、indexOfObjectタイプのルックアップを実行するときに大文字と小文字を区別しません。

トニー。

4

2 に答える 2

0

NSScannerを使用すると、文字列を個別の単語に解析して、indexOfCaseInsensitiveStringメソッドに渡すことができると思います。scanCharactersFromSet:intoString:空白文字や改行文字など、無視するすべての文字のセットを使用すると、単語の先頭に移動できます。次に、scanUpToCharactersFromSet:intoString:同じセットを使用して末尾までスキャンできます。言葉。各スキャンの最初と最後にscanLocationを使用すると、その単語の範囲を取得できるため、配列内で一致するものが見つかった場合は、文字列内のどこで置換するかがわかります。

于 2012-04-23T03:14:26.530 に答える
0

ご提案いただきありがとうございます。1つの例外を除いて機能しています。

元の入力を再作成できるように、すべての句読点をキャプチャしたいのですが、代わりの単語を使用します。文字セットに「スペース」がありますが、スキャナはスペースを「intoString」に入れません。「(」や「;」などの文字セットで指定したその他の文字は、「intoString」で表されます。

ネットは、入力を再作成すると、個々の単語が互いに実行されることを除いて完璧です.

更新:次を含めることでその問題を修正しました:

[theScanner setCharactersToBeSkipped:nil];

再度、感謝します。

于 2012-04-24T05:25:57.353 に答える