0

次のことを行う簡単な方法があるかどうかを確認しようとしています。

次の NSString があるとします。
@"123456 copy cat";

「コピー」の前にすべてを削除し、可変になる前にテキストの長さを削除する必要があります (ユーザー入力によって異なります)。

おそらく無限ループを実行して部分文字列をチェックできることはわかっていますが、より高速な方法があることを願っています

4

2 に答える 2

12
NSString *string = @"123456 copy cat";
NSRange range = [string rangeOfString:@"copy"];
NSString *newString = [string substringFromIndex:range.location];

それが簡単な答えです。問題は、ユーザーが「コピー」という単語を入力する可能性があることです。この方法で範囲を取得したとしても:

NSRange range = [string rangeOfString:@"copy cat"];

ユーザーがそのフレーズを入力する可能性はまだあります。追加のチェックを入れる頃には、もはや「近道」ではありません。

編集

以下を使用するためのコメントにある Chuck の優れた観察を見逃さないでください。

-[NSString rangeOfString:options:]

于 2013-02-19T22:59:12.193 に答える
2

文字列の一部を削除するには、保持したい部分を含む新しい文字列を作成するか、文字列の変更可能なコピーを作成してそれを変更する必要があります。

「copy」で始まる部分を含む新しい文字列を作成するには:

NSString *input;
NSString *output;
NSRange copyRange;

input = @"123456 copy cat";
copyRange = [input rangeOfString:@"copy"];
output = [input substringFromIndex:copyRange.location];

変更可能な文字列を作成し、「コピー」までの部分を削除するには:

NSString *input;
NSMutableString *output;
NSRange copyRange;

input = @"123456 copy cat";
output = [input mutableCopy];
copyRange = [output rangeOfString:@"copy"];
[output replaceCharactersInRange:NSMakeRange(0, copyRange.location) withString:@""];
[output autorelease]; // depending on what you want to do

ユーザー入力に「input」という単語も含まれている場合に、NSBackwardsSearch で rangeOfString:withOptions: を使用することに関する他の回答のコメントも参照してください。

于 2013-02-19T23:06:13.210 に答える