2009-08-31 3 views
21

나는이NSString 또는 NSMutableString의 문자 수를 계산합니까?

NSCharacterSet *myCharSet = [NSCharacterSet characterSetWithCharactersInString: myString]; 
[myCharSet count]; 

을 시도하지만 NSCharacterSet 카운트에 응답하지 않을 수 있습니다 경고를했습니다. 이것은 위의 코드가 작동한다고 생각하는 iPhone이 아닌 데스크톱 응용 프로그램을위한 것입니다.

+0

설명 : 문자열에 고유 한 문자 수를 원하십니까? –

+0

아니요 - 총 문자 수입니다. – 4thSpace

답변

76

내가 여기서 뭔가 빠진,하지만 단순히 일을 잘못 될 수 있습니다

NSUInteger characterCount = [myString length]; 

그냥 문자열의 문자 수를 얻으려면, 나는 NSCharacterSet와 주변 혼란에 어떤 이유가 표시되지 않습니다.

+14

그냥 -'-length'는 ('NSString' 문서에 정의 된대로)'수신기에서 유니 코드 문자의 수를 반환합니다. 엄밀히 말하면 실제로'유니 코드 문자의 수 '가 아니라'UTF-16 코드 단위의 수 '를 반환하기 때문에 문서가 잘못되었습니다. 이러한 구별은 대다수의 프로그래머와 사용에있어 중요하지 않지만 중요한 결과를 초래합니다. 예를 들어,'[@ "\ U0010ffff"length]'는 하나의 유니 코드 문자를 포함하고 있지만'2'를 반환합니다. 'characterAtIndex :'는'0'과'1'은'0xdbff'와'0xdfff'를 각각 반환합니다. – johne

+8

^이제는 대부분의 iOS 사용자가 emojis로 타이핑하기 때문에 위의 'length'메소드를 사용하여 2 문자로 간주되기 때문에 매우 중요합니다 ... 1 문자 임에도 불구하고 말입니다. –

+0

CoreData를 사용하는 경우 예상보다 더 중요 할 수 있습니다. ""와 같은 서로 게이트 쌍을 해체하면 커밋 단계에서 CoreData의 유효성 검사 규칙을 통과하지 못하고 CoreData가 오류 코드 1671을 표시합니다. 그것에 관해서는 아무 것도 모릅니다. 실제로 무슨 일이 일어나고 있는지를 알아보기 위해 나는 반 년이 걸렸습니다. – peak

0

NSCharacterSet은 어느 플랫폼에서도 NSSet의 하위 클래스가 아니므로 iPhone에서 작동하지 않아야합니다.

NSSet을 서브 클래스로 만들지 말고, 값을 추가 한 다음 필요에 따라 문자 세트가 필요한 NSCharacterSet으로 반환하는 메서드를 사용해야합니까?

+0

NSSet은 클래스 클러스터이므로 쉽게 (또는 실질적으로) 서브 클래 싱되지 않습니다. –

+0

문자열 내의 모든 문자 수를 계산하는 간단한 방법은 없습니까? – 4thSpace

+1

예 1 개 (실제 길이) : [myString lengthOfBytesUsingEncoding : NSUTF32StringEncoding]/4; – Stephane

관련 문제