元の句読点とスペース。私がこれをやりたいのは、元のようにいくつかの言葉を変えて戻したいのです。スプリットNSStringのは、元の形式に再参加
答えて
あなたは、元の句読点を排除しているので、バック自動的にそれを有効にする方法はありません。
唯一の方法は、componentsSeparatedByCharactersInSet
を使用しないことです。
文字列を繰り返し処理し、文字ごとに文字セットに属しているかどうかを確認する方法もあります。
はいの場合は、charをリストに追加し、部分文字列を別のリストに追加します(NSMutableArray
クラスを使用できます)。 このようにして、たとえば、最初の部分文字列と2番目の部分文字列の間の区切り文字がセパレータのリストの最初の文字であることがわかります。
どの単語を置き換える必要があるのですか?最初の場所でそれを分解するのではなく、おそらく-stringByReplacingOccurrencesOfString:withString:options:range:
を使用する方が適しています。
私は-stringByReplacingOccurrencesOfStringを使用することはできません:withString:オプション:範囲:私はそれが別の単語に含まれていないときだけの単語の出現をフィルタしたいので。たとえば、クラスが私の言葉の1つだったなら、私はそれを「クラシック」に置き換えたくありません。 – charleyh
スペースを有効活用してください。 '@" class "'のような文字列を探すことができます。この方法では、文字列をスキャンする際に特定のオプションを使用することもできます。 –
問題が表示されます。 @DavidDunhamが提案したように、他のAPIを調べてください。 'NSLinguisticTagger'は文字列を解体するのに非常に役立ちます。 –
あなたは言葉を再度参加するために、配列クラスのpathArray componentsJoinedByString:
方法を使用することができます。
NSString *orig = [words pathArray componentsJoinedByString:@" "];
はい、すべての単語が元の句読点ではなくスペースで結合されます。 – charleyh
あなたは最高のAPIを使用していない可能性があります。あなたが本当に言葉を心配しているなら、あなたは単語ベースのAPIを使うべきです。私はそれがNSDataDetector
か他の何かになるかどうか少し不明瞭です。 (私はNSRegularExpression
がよりスマートな方法で単語の境界を扱うことができると信じています。)
あなたは、Mac OS X 10.7以降またはiOS 4+あなたがNSRegularExpression
を使用することができますを使用している場合は、単語を交換するパターンがある:「\ bの単語 \ b " - (スペースは約の単語)\ bは単語の境界に一致します。方法replaceMatchesInString:options:range:withTemplate:
とstringByReplacingMatchesInString:options:range:withTemplate:
を見てください。
正規表現を使用したい場合は、regcomp/regexec Cベースの関数をラップすることができます。それらはワード境界もサポートします。しかし、この単純なケースでは、他の答えで言及された他のココアオプションの1つを使用することを好むかもしれません。
NSString *myString = @"Foo Bar Blah B..";
NSArray *myWords = [myString componentsSeparatedByCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@" "]
];
NSString* string = [myWords componentsJoinedByString: @" "];
NSLog(@"%@",string);
単語で分割するより堅牢な方法は、文字列列挙を使用することです。スペースは必ずしも区切り文字ではなく、すべての言語がとにかくスペースを区切っているとは限りません(たとえば、日本語)。
NSString * string = @" \n word1! word2,%$?'/word3.word4 ";
[string enumerateSubstringsInRange:NSMakeRange(0, string.length)
options:NSStringEnumerationByWords
usingBlock:
^(NSString *substring, NSRange substringRange, NSRange enclosingRange, BOOL *stop) {
NSLog(@"Substring: '%@'", substring);
}];
// Logs:
// Substring: 'word1'
// Substring: 'word2'
// Substring: 'word3'
// Substring: 'word4'
しかし、autoreleaseメソッドで宣言されているため、このブロックを終了した後の値は、値を保持するために何をしなければならないのですか?ブロック外の値を使用したいのですか? –
@KishoreKumar - 'NSMutableArray'あなたはブロックの外に作成しました。 – Robert
はい兄私は試しましたが、私の値は@Robertを使用しようとしたときに消えましたhttp://codepaste.net/7du7k6 –
- 1. NSStringの形式の問題
- 2. スプリットRDLCの式は
- 3. 元の形式で
- 4. mm/dd/yyyyのNSString to NSDate hh:mm:ss形式
- 5. スプリットは、私は次の形式で私のExcelの列に持って
- 6. IOS NSStringプロパティ参照元クラスでは常にnilです
- 7. スプリット数式?
- 8. は、不正な形式のURI参照
- 9. テキストに「分」を追加し(日付時刻形式)、元のvarchar形式に変換し直します。SQL Server
- 10. 2次元配列にデータを追加するNetcdf形式Matlab
- 11. スプリット()メソッドは、私は次の形式のテキストファイルを読んでいる
- 12. DataColumnの元のデータ形式を取得
- 13. 時刻が24時間形式のときNSStringからのNSDate
- 14. nullのiOSを返すNSString形式の日付?
- 15. "2016-10-29 7 AM"の形式のNSStringからNSDateへ
- 16. スプリット多次元javascript配列
- 17. DataTableの表示データ形式を2次元形式に変換する
- 18. Python 3:ユニコードテキストを元の形式に変換するには?
- 19. NSStringのstringWithFormatとダイナミックな文字列形式
- 20. NSDataオブジェクトをNSString形式に変換する
- 21. data.table条件式に参加
- 22. は元の形式で辞書に保存したCSVファイルを
- 23. 元の形式のデータをSQLiteデータベースに保存し、それらのデータをその書式形式で再度表示します。
- 24. vcprojファイル(vs2008)のプロジェクト参照形式
- 25. 再フォーマット時間形式
- 26. Yii2パス形式再帰URL
- 27. radix64エンコーディングからバイナリストリーム(元の形式)を復元する方法
- 28. 多次元配列形式のデータを含む行ID /行データの追加
- 29. iOSのNSArrayからNSStringの適切な形式に変換できません
- 30. rds形式のデータをR形式のshp形式に変換するには?
どうすればいいですか?あなたは私にいくつかのコードを表示しますか? – charleyh
答えを編集して、可能なアルゴリズムを追加しました。 – Saphrosit
恐ろしい、ありがとう! – charleyh