0

テキストビューの最初の文を取得しようとしています。次のコードがありますが、範囲外のエラーが発生しています。ありがとうございました。または、実際には複雑ではない方法はありますか。

   -(IBAction)next:(id)sender
{
    NSRange ran = [[tv.text substringFromIndex:lastLocation] rangeOfString:@". "];
    if(ran.location != NSNotFound)
    {
        NSString * getRidOfFirstHalfString = [[tv.text substringFromIndex:lastLocation] substringToIndex:ran.location];
        NSLog(@"%@",getRidOfFirstHalfString);
        lastLocation+=getRidOfFirstHalfString.length;
    }
4

4 に答える 4

4

どうですか:

NSString *finalString = [[tv.text componentsSeparatedByString:@"."] objectAtIndex:0] // Get the 1st part (left part) of the separated string

textviewのテキストに目を通し、テキストを個別のコンポーネントに分割します。ここで、を呼び出しcomponentsSeperatedByStringてピリオドを見つけますtv.text配列の0番目のオブジェクトとなる最初の文が必要です。

于 2012-07-25T02:41:29.920 に答える
4

この質問への回答をすでに受け入れていることは承知していますがtokenizer、文字列を検索するだけでなく、テキストビューの使用を検討することをお勧めします。トークナイザーは、、、および終了引用符などの". " 句読点を自動的に処理します。次のように使用できます。!?

id<UITextInputTokenizer> tokenizer = textView.tokenizer;
UITextRange *range = [tokenizer rangeEnclosingPosition:textView.beginningOfDocument
    withGranularity:UITextGranularitySentence
    inDirection:UITextStorageDirectionForward];
NSString *firstSentence = [textView textInRange:range];

すべての文を列挙したい場合は、次のように行うことができます。

id<UITextInputTokenizer> tokenizer = textView.tokenizer;
UITextPosition *start = textView.beginningOfDocument;
while (![start isEqual:textView.endOfDocument]) {
    UITextPosition *end = [tokenizer positionFromPosition:start toBoundary:UITextGranularitySentence inDirection:UITextStorageDirectionForward];
    NSString *sentence = [textView textInRange:[textView textRangeFromPosition:start toPosition:end]];
    NSLog(@"sentence=%@", sentence);
    start = end;
}
于 2012-07-25T03:01:16.233 に答える
1

サブストリングが実際に見つかったことを確認してみてください。

NSRange ran = [tv.text rangeOfString:@". "];
if(ran.location != NSNotFound)
{
    NSString * selectedString = [tv.text substringToIndex:ran.location];
    NSLog(@"%@",selectedString);
}
于 2012-07-25T02:29:17.577 に答える
0

または、次のようにNSScannerを使用してみてください。

NSString *firstSentence = [[NSString alloc] init];
NSScanner *scanner = [NSScanner scannerWithString:tv.text];
NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"."];
[scanner scanUpToCharactersFromSet:set intoString:&firstSentence];

これが必要かどうかはわかりませんが、最初の文が必要なので、ピリオドを追加できます(これを行う方法はおそらく知っていますが、とにかく表示しても問題ありません)。

firstSentence = [firstSentence stringByAppendingFormat:@"."];

お役に立てれば!

PS:うまくいかなかった場合は、テキストビューに実際にはテキストが含まれていない可能性があります。

于 2012-07-25T02:31:08.983 に答える