2012-07-25 9 views
0

텍스트보기의 첫 번째 문장을 가져 오려고합니다. 다음 코드는 있지만 범위를 벗어난 오류가 발생합니다. 고맙습니다. 아니면 실제로 복잡하지 않은 방법이 있습니까?textview의 첫 번째 문장 얻기

-(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; 
    } 

답변

0

당신은 양자 택일이 같은 NSScanner를 사용하려고 할 수 어떻게하는지, 어쨌든 보여주는 것은 상처가 아님) :

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

희망이 있습니다.

추신 : 작동하지 않는 경우 텍스트보기에 실제로 텍스트가 포함되지 않았을 수 있습니다.

+0

없이 출력 ...... – BDGapps

+0

@BDGapps -나요 NSLog'firstSent'? 나는 지금 그것을 시험했고 완벽하게 잘 작동한다. 작동하는 모습을 보여주는 스크린 샷을 추가했습니다. – pasawaya

+0

아니, 내가 한거야. 나는 코드 대신에 펜촉에 텍스트를 추가했다. 고맙습니다 – BDGapps

1

부분 문자열이 실제로 발견되었는지 확인하십시오. 당신이 원하는 경우

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

내가 잘 모르겠지만, 첫 번째 문장을 원하기 때문에, 당신은 당신은 아마 알고 (기간을 추가 할 수 있습니다 :

NSRange ran = [tv.text rangeOfString:@". "]; 
if(ran.location != NSNotFound) 
{ 
    NSString * selectedString = [tv.text substringToIndex:ran.location]; 
    NSLog(@"%@",selectedString); 
} 
4

방법에 대해 :

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

가 텍스트 뷰의 텍스트를 가서 tv.textcomponentsSeperatedByString를 호출하여 기간을 찾을 별도의 구성 요소에 텍스트를 나눕니다. 첫 번째 문장을 원하면 배열의 0 번째 객체가됩니다.

+1

+1 - 니스! 그것은 그것을 할 수있는 좋은 방법입니다! – pasawaya

+0

감사합니다. 다행스럽게 도울 수있었습니다! – Imirak

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; 
} 
+0

두 번째 문장을 원한다면 어떻게해야합니까? – BDGapps

+1

답변을 업데이트했습니다. –

관련 문제