2011-12-21 7 views

答えて

2

あなたは、元の句読点を排除しているので、バック自動的にそれを有効にする方法はありません。

唯一の方法は、componentsSeparatedByCharactersInSetを使用しないことです。

文字列を繰り返し処理し、文字ごとに文字セットに属しているかどうかを確認する方法もあります。
はいの場合は、charをリストに追加し、部分文字列を別のリストに追加します(NSMutableArrayクラスを使用できます)。 このようにして、たとえば、最初の部分文字列と2番目の部分文字列の間の区切り文字がセパレータのリストの最初の文字であることがわかります。

+0

どうすればいいですか?あなたは私にいくつかのコードを表示しますか? – charleyh

+0

答えを編集して、可能なアルゴリズムを追加しました。 – Saphrosit

+0

恐ろしい、ありがとう! – charleyh

2

どの単語を置き換える必要があるのですか?最初の場所でそれを分解するのではなく、おそらく-stringByReplacingOccurrencesOfString:withString:options:range:を使用する方が適しています。

+0

私は-stringByReplacingOccurrencesOfStringを使用することはできません:withString:オプション:範囲:私はそれが別の単語に含まれていないときだけの単語の出現をフィルタしたいので。たとえば、クラスが私の言葉の1つだったなら、私はそれを「クラシック」に置き換えたくありません。 – charleyh

+0

スペースを有効活用してください。 '@" class "'のような文字列を探すことができます。この方法では、文字列をスキャンする際に特定のオプションを使用することもできます。 –

+0

問題が表示されます。 @DavidDunhamが提案したように、他のAPIを調べてください。 'NSLinguisticTagger'は文字列を解体するのに非常に役立ちます。 –

2

あなたは言葉を再度参加するために、配列クラスのpathArray componentsJoinedByString:方法を使用することができます。

NSString *orig = [words pathArray componentsJoinedByString:@" "]; 
+0

はい、すべての単語が元の句読点ではなくスペースで結合されます。 – charleyh

1

あなたは最高のAPIを使用していない可能性があります。あなたが本当に言葉を心配しているなら、あなたは単語ベースのAPIを使うべきです。私はそれがNSDataDetectorか他の何かになるかどうか少し不明瞭です。 (私はNSRegularExpressionがよりスマートな方法で単語の境界を扱うことができると信じています。)

0

あなたは、Mac OS X 10.7以降またはiOS 4+あなたがNSRegularExpressionを使用することができますを使用している場合は、単語を交換するパターンがある:「\ bの単語 \ b " - (スペースは約の単語)\ bは単語の境界に一致します。方法replaceMatchesInString:options:range:withTemplate:stringByReplacingMatchesInString:options:range:withTemplate:を見てください。

正規表現を使用したい場合は、regcomp/regexec Cベースの関数をラップすることができます。それらはワード境界もサポートします。しかし、この単純なケースでは、他の答えで言及された他のココアオプションの1つを使用することを好むかもしれません。

3
NSString *myString = @"Foo Bar Blah B.."; 
NSArray *myWords = [myString componentsSeparatedByCharactersInSet: 
        [NSCharacterSet characterSetWithCharactersInString:@" "] 
        ]; 
NSString* string = [myWords componentsJoinedByString: @" "]; 
NSLog(@"%@",string); 
6

単語で分割するより堅牢な方法は、文字列列挙を使用することです。スペースは必ずしも区切り文字ではなく、すべての言語がとにかくスペースを区切っているとは限りません(たとえば、日本語)。

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' 
+0

しかし、autoreleaseメソッドで宣言されているため、このブロックを終了した後の値は、値を保持するために何をしなければならないのですか?ブロック外の値を使用したいのですか? –

+0

@KishoreKumar - 'NSMutableArray'あなたはブロックの外に作成しました。 – Robert

+0

はい兄私は試しましたが、私の値は@Robertを使用しようとしたときに消えましたhttp://codepaste.net/7du7k6 –

関連する問題