2010-01-28 7 views
3

나는 많은 문장으로 NSString을 가지고 있는데, 문장을 NSArray 개로 나누고 싶다. 아무도이 문제를 해결하지 못했습니까? 내가 할 수있는 enumerateSubstringsInRange:options:usingBlock:을 찾았지만 iPhone (Snow Leopard에만 해당)에서 사용할 수없는 것 같습니다. 마침표를 기준으로 문자열을 분할하는 방법에 대해 생각했지만 매우 강력하지는 않습니다.문자열을 문장 코코아로 나누는 방법

지금까지 가장 좋은 방법은 RegexKitLite를 문장 배열에 정규 표현하는 것입니다. 솔루션?

+2

"문장"을 정의하십시오. 일단 그렇게 할 수 있다면 솔루션은 간단합니다. –

+0

그래, 나는 다른 누군가가 이미 문장의 합리적으로 견고한 정의를 내놓기를 바랐다. 나는 거인의 어깨에 서고 싶다! –

+0

TeX를 보면 마침표가 대문자 바로 뒤의 문장을 제외하고 문장의 끝을 표시한다고 추측합니다. 그렇지 않다면 수작업으로 풀 스톱인지 간단히 말해야 할지를 지정해야합니다. –

답변

9

CFStringTokenizer을 사용하십시오. kCFStringTokenizerUnitSentence 옵션을 사용하여 토크 나이저를 만들 수 있습니다.

+1

코드 예제 대단 할거야! – fatuhoku

1

잠시 사용하지는 않았지만 NSString, NSCharacterSet 및 NSScanner를 사용하여이 작업을 수행 할 수 있다고 생각합니다. 마지막 문장 구두점을 포함하는 문자 집합을 만든 다음 -[NSScanner scanUpToCharactersFromSet:intoString:]을 호출합니다. 각 스캔은 문장을 문자열로 빨아 들이고 스캐너가 문자열을 다 쓸 때까지 계속 메소드를 호출합니다.

물론 텍스트에는 잘 구두점을 두어야합니다.

3

나는

NSScanner *sherLock = [NSCanner scannerWithString:yourString]; // autoreleased 
NSMutableArray *theArray = [NSMutableArray array]; // autoreleased 
while(![sherLock isAtEnd]){ 
    NSString *sentence = @""; 
    // . + a space, your sentences probably will have that, and you 
    // could try scanning for a newline \n but iam not sure your sentences 
    // are seperated by it 
    [sherLock scanUpToString:@". " inToString:&sentence]; 
    [theArray addObject:sentence]; 
} 

이 그것을해야합니까, 거기에 몇 가지 작은 실수가있을 수 있습니다, 그것을 위해 스캐너를 사용하는 것이하지만 내가 어떻게 할 것입니다. 당신은이 문서에서 NSScanner를 찾아보아야합니다.이 상황에 대해 이라는 메서드를 발견 할 수 있습니다. 에 대해 어떻게

0

: "... 1 2 3"

NSArray *sentences = [string componentsSeparatedByString:@". "]; 

이 배열을 반환합니다 ("하나", "2", "세") 문자열에서

+0

"내 친구 Dr. Mark는 St. Jude에서 박사 학위를 받았습니다." –

+0

그래, 질문을 게시 한 후에 그 방법을 시도했다. 그것은 단지 "."을 스캔하는 것보다 효과적이었습니다. 그러나별로. –

0

NSArray * 문장 = [astring componentsSeparatedByCharactersInSet : [NSCharacterSet punctuationCharacterSet]];