2012-10-15 2 views
0

nsstring의 각 문자를 하나씩 다른 nscharactersets과 비교하고 일치하는 문자 집합에 따라 다른 작업을 수행하려고합니다.은 nsstring의 문자를 다른 문자셋과 비교합니다.

for 루프를 사용하여 각 문자를 비교할 부분 문자열에 할당 할 수 있습니다.

- (void) compareCharactersOfWord: (NSString *) word { 

    for (int i = 0; i<[word length]; i++) { 

     NSString *substring = [word substringWithRange:NSMakeRange(i,1)]; 


     //need to compare the substring to characterset here 

    } 
} 

나는 또한 나의 두 캐릭터 셋

setOne = [[NSCharacterSet characterSetWithCharactersInString:@"EAIONRTLSU"]invertedSet]; 

setTwo = [[NSCharacterSet characterSetWithCharactersInString:@"DG"] invertedSet]; 

내가 비교 부분에 손실 조금 있어요

있습니다. "rangeOfCharacterFromSet"과 같은 다른 방법을 시도했지만 오류가 계속 발생했습니다. 의사에 나는 당신은 문자열에서 각 문자 ( unichar)를 추출하고 NSCharacterSet 중의 일부인지 확인하기 위해 [NSCharacterSet characterIsMember:]를 사용할 필요가

if (setOne containsCharacterFrom substring) { 

//do stuff here 

} else if (setTwo containsCharacterFrom substring) { 

//do other stuff here 

} 

답변

1

보고 당신 ' substring '변수를 사용하십시오.

if ([substring rangeOfCharacterFromSet:setOne].location != NSNotFound) { 
    // substring is in setOne 
} else if ([substring rangeOfCharacterFromSet:setTwo].location != NSNotFound) { 
    // substring is in setTwo 
} 

또 다른 옵션은 문자를 사용하는 것입니다.

for (int i = 0; i<[word length]; i++) { 
    unichar ch = [word characterAtIndex:i]; 

    if ([setOne characterIsMember:ch]) { 
     // in setOne 
    } else if ([setTwo characterIsMember:ch]) { 
     // in setTwo 
    } 
} 

두 번째 옵션에는 큰 제한이 있습니다. 0xFFFF보다 높은 유니 코드 문자에서는 작동하지 않습니다.

1

과 같이해야합니다 : 경우

- (void) compareCharactersOfWord: (NSString *)word 
{ 
    // These could be initialised globally to speed things up a little... 
    NSCharacterSet *setOne = [[NSCharacterSet characterSetWithCharactersInString:@"EAIONRTLSU"] invertedSet]; 
    NSCharacterSet *setTwo = [[NSCharacterSet characterSetWithCharactersInString:@"DG"] invertedSet]; 

    for (NSUInteger index = 0; index < [word length]; index++) 
    { 
     unichar c = [word characterAtIndex:index]; 
     if ([setOne characterIsMember:c]) 
     { 
      // c is a member of character set #1 
     } 
     else if ([setTwo characterIsMember:c]) 
     { 
      // c is a member of character set #2 
     } 
     else 
     { 
      // c is a member of neither character set 
     } 
    } 
}