8

タイトルが示すように、NSString から最後の単語を取り出したいと思います。私はこのコードを使用して考えました:

NSArray *listItems = [someNSStringHere componentsSeparatedByString:@" "];
NSString *lastWordString = [NSString stringWithFormat:@"%@", listItems.lastObject];
anotherNSStringHere = lastWordString;

しかし、NSArrayが大きい場合(および大きい場合)、ロードに時間がかかり、コンマで区切られた単語を認識しないと思います。

助けてくれてありがとう!

4

7 に答える 7

29

超堅牢にしたい場合:

__block NSString *lastWord = nil;

[someNSStringHere enumerateSubstringsInRange:NSMakeRange(0, [someNSStringHere length]) options:NSStringEnumerationByWords | NSStringEnumerationReverse usingBlock:^(NSString *substring, NSRange subrange, NSRange enclosingRange, BOOL *stop) {
    lastWord = substring;
    *stop = YES;
}];

(これはローマ字以外の言語でも動作するはずです; iOS 4+/OS X 10.6+.)

基本的な説明:

-enumerateSubstringsInRage:options:usingBlock:缶に書かれていることを行います。オプションとして渡すものによって定義される部分文字列を列挙します。NSStringEnumerationByWords「私に与えられた言葉が欲しい」とNSStringEnumerationReverse言い、「文字列の先頭ではなく末尾から始めてください」と言います。

最後から始めているので、最初に与えられたsubstring単語が文字列の最後の単語になるので、その単語を設定lastWordし、BOOL指している bystopを YES に設定して、列挙がすぐに停止するようにします。

lastWordはもちろん として定義されて__blockいるため、ブロック内に設定して外に表示することがnilでき、文字列単語が含まれていない場合 (たとえば、空であるか、すべて句読点である場合) に初期化されているため、使用しようとしてもクラッシュしません。lastWord.

于 2012-06-15T14:52:24.680 に答える
12

これを試してください:

NSRange range = [someNSStringHere rangeOfString:@" " options:NSBackwardsSearch];
NSString *result = [someNSStringHere substringFromIndex:range.location+1];
于 2012-06-15T14:41:01.480 に答える
3

正規表現を使用したい場合(文字列の最後で探しているものに関してより複雑になり始めたい場合に便利です)、次のようにすることができます。

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"\\S+\\Z" options:0 error:nil];
NSTextCheckingResult *found = [regex firstMatchInString:inputString options:0 range:NSMakeRange(0, [inputString length])];

if (found.range.location != NSNotFound)
    result = [inputString substringWithRange:found.range];
于 2012-06-15T15:32:23.207 に答える
1

最も効率的な方法は、文字列の最後から開始し、各文字を調べて、それが単語として定義したものの一部であるかどうかを確認してから、substringFromIndex:またはを使用して目的の単語を抽出することですsubstringWithRange:

于 2012-06-15T14:36:44.263 に答える
0

文字列の末尾からシンボルを読み取り、それらを 0 インデックスで結果文字列にコピーできます。スペースまたはカンマのどちらを読んでも、結果の文字列には最後の単語が含まれます

于 2012-06-15T14:34:27.010 に答える
0

NSStringの関数を使用rangeOfSubstring:options:して決定できます。例えば:

後方検索オプションを使用して文字列の末尾から検索を開始し、文字列でスペースを検索します。

NSRange r = [string rangeOfString:@" " options:NSBackwardsSearch];

これにより、文字列の最後の単語の場所が見つかります。substringWithRange:次に、例を使用して文字列を取得します。

NSRange found = NSMakeRange(NSMaxRange(r), string.length - NSMaxRange(r)); NSString *foundString = [string substringWithRange:found];

r以前の範囲はどこにありますか。

rまた、実際に存在することを確認するように注意してください。文字列に単語が 1 つしかない場合は、次のrようになります。{NSNotFound, 0}

私が助けてくれることを願っています!

ベン

于 2012-06-15T14:44:38.637 に答える