Trong khi mã của Barry Wark hoạt động tốt cho tiếng Anh, nó không phải là cách ưu tiên để phát hiện các ngắt từ. Nhiều ngôn ngữ, chẳng hạn như tiếng Trung và tiếng Nhật, không tách biệt các từ bằng cách sử dụng dấu cách. Và Đức, ví dụ, có nhiều hợp chất khó phân tách một cách chính xác.
gì bạn muốn sử dụng là CFStringTokenizer:
CFStringRef string; // Get string from somewhere
CFLocaleRef locale = CFLocaleCopyCurrent();
CFStringTokenizerRef tokenizer = CFStringTokenizerCreate(kCFAllocatorDefault, string, CFRangeMake(0, CFStringGetLength(string)), kCFStringTokenizerUnitWord, locale);
CFStringTokenizerTokenType tokenType = kCFStringTokenizerTokenNone;
unsigned tokensFound = 0, desiredTokens = 10; // or the desired number of tokens
while(kCFStringTokenizerTokenNone != (tokenType = CFStringTokenizerAdvanceToNextToken(tokenizer)) && tokensFound < desiredTokens) {
CFRange tokenRange = CFStringTokenizerGetCurrentTokenRange(tokenizer);
CFStringRef tokenValue = CFStringCreateWithSubstring(kCFAllocatorDefault, string, tokenRange);
// Do something with the token
CFShow(tokenValue);
CFRelease(tokenValue);
++tokensFound;
}
// Clean up
CFRelease(tokenizer);
CFRelease(locale);
Bạn đánh tôi với nó: +1. Đừng quên componentsJoinedByString: vì OP đang tìm kiếm kết quả NSString :) –
Điều này có hiệu quả nếu chuỗi chỉ có 3 từ? WordIndex là gì? (nó xuất hiện không được sử dụng trong ví dụ đầu tiên) – philfreo
Bạn sẽ phải thay đổi nWords nếu chỉ có ba từ. Tất nhiên, bạn có thể tìm các thành phầnSeparatedByString và đếm chúng trước khi quyết định về nWords, nhưng bạn không đề cập đến điều đó như là một yêu cầu trong câu hỏi của bạn. –