답변:
여부를 확인할 수 있습니다 [string length] == 0
. nil을 호출 length
하면 0이 반환 되므로 유효하지만 빈 문자열 (@ "")인지 nil인지 확인합니다 .
ZERO WIDTH SPACE
있기 때문에 실제로 중요하지 않은 것에 대한 해석은 문자열이 비어 있는지 테스트하면 문자가 없기 때문에 그렇지 않다고 말할 것입니다. 유니 코드 표준에 따라 인쇄 할 수 없습니다. @"\u200B"
![string length]
. 더 깨끗해 보입니다.
마크의 대답은 맞습니다. 그러나 나는이 기회를 통해 Wil Shipley의 일반화 된 블로그isEmpty
에 대한 포인터를 포함시킬 것입니다 .
static inline BOOL IsEmpty(id thing) {
return thing == nil
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
-isNotEmpty
:)
첫 번째 방법은 유효하지만 문자열에 공백 ( @" "
) 이 있으면 작동하지 않습니다 . 따라서 테스트하기 전에이 공백을 지워야합니다.
이 코드는 문자열 양쪽의 모든 공백을 지 웁니다.
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
한 가지 좋은 아이디어는 하나의 매크로를 만드는 것이므로이 몬스터 라인을 입력 할 필요가 없습니다.
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
이제 다음을 사용할 수 있습니다.
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
NSString
하는 메소드를 추가 하는 카테고리에 의해 더 잘 제공됩니다 trimmedString
.
whitespaceCharacterSet
에는 줄 바꿈이 포함되어 있지 않습니다! 여기에 내가 쓴 카테고리 trim
와 다른 유용한 방법들이 있습니다 : github.com/alexch/unsuck/blob/master/unsuck/NSString%2BUnsuck.m github.com/alexch/unsuck/blob/master/unsuckTests/…
내가 본 최고의 솔루션 중 하나 (Matt G보다 낫다)는 Git Hub 저장소 (Willey의 솔루션이지만 링크를 찾을 수 없음)에서 가져온이 향상된 인라인 기능입니다.
// Check if the "thing" passed is empty
static inline BOOL isEmpty(id thing) {
return thing == nil
|| [thing isKindOfClass:[NSNull class]]
|| ([thing respondsToSelector:@selector(length)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [(NSArray *)thing count] == 0);
}
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? 조만간, 당신은 어떤 종류의 수업을하는지 물어볼 것입니다.
이 카테고리를 더 잘 사용해야합니다.
@implementation NSString (Empty)
- (BOOL) isWhitespace{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
@implementation NSString (Empty) - (BOOL) empty{ return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]length] == 0); } @end
Marc 's와 Kyle 's의 조합입니다.
나는 이것을 넣었다.
@implementation NSObject (AdditionalMethod)
-(BOOL) isNotEmpty
{
return !(self == nil
|| [self isKindOfClass:[NSNull class]]
|| ([self respondsToSelector:@selector(length)]
&& [(NSData *)self length] == 0)
|| ([self respondsToSelector:@selector(count)]
&& [(NSArray *)self count] == 0));
};
@end
문제는 self가 nil이면이 함수가 호출되지 않는다는 것입니다. 원하는 false를 반환합니다.
-(BOOL)isEmpty{ return ![self isNotEmpty]}
범주에서 작동하지 않습니다.
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? 조만간, 당신은 어떤 종류의 수업을하는지 물어볼 것입니다.
문자열을 다음 방법으로 전달하십시오.
+(BOOL)isEmpty:(NSString *)str
{
if(str.length==0 || [str isKindOfClass:[NSNull class]] || [str isEqualToString:@""]||[str isEqualToString:NULL]||[str isEqualToString:@"(null)"]||str==nil || [str isEqualToString:@"<null>"]){
return YES;
}
return NO;
}
이것이 Objective C 질문이지만 NSString
Swift 에서 사용해야 하므로 여기에 답변을 포함 시키 십시오.
let myNSString: NSString = ""
if myNSString.length == 0 {
print("String is empty.")
}
또는 NSString
선택 사항 인 경우 :
var myOptionalNSString: NSString? = nil
if myOptionalNSString == nil || myOptionalNSString!.length == 0 {
print("String is empty.")
}
// or alternatively...
if let myString = myOptionalNSString {
if myString.length != 0 {
print("String is not empty.")
}
}
일반적인 스위프트 String
버전은
let myString: String = ""
if myString.isEmpty {
print("String is empty.")
}
참조 : 스위프트에 빈 문자열을 확인?
이 답변이 이미 주어진 답변의 복제본 일 수는 있지만 조건을 확인하는 순서로 수정 및 변경을 거의하지 않았습니다. 아래 코드를 참조하십시오 :
+(BOOL)isStringEmpty:(NSString *)str
{
if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
return YES;
}
return NO;
}
이 방법을 사용하여 문자열이 비어 있거나 아닌지 확인할 수 있습니다.
+(BOOL) isEmptyString : (NSString *)string
{
if([string length] == 0 || [string isKindOfClass:[NSNull class]] ||
[string isEqualToString:@""]||[string isEqualToString:NULL] ||
string == nil)
{
return YES; //IF String Is An Empty String
}
return NO;
}
모범 사례는 공유 클래스를 UtilityClass라고 말하고이 메소드를 광고하여 애플리케이션을 호출하여이 메소드를 사용할 수 있도록하는 것입니다.
문자열이 비어 있는지 확인하는 두 가지 방법이 있습니다.
문자열 이름이이라고 가정 해 봅시다 NSString *strIsEmpty
.
방법 1 :
if(strIsEmpty.length==0)
{
//String is empty
}
else
{
//String is not empty
}
방법 2 :
if([strIsEmpty isEqualToString:@""])
{
//String is empty
}
else
{
//String is not empty
}
위의 방법 중 하나를 선택하고 문자열이 비어 있는지 확인하십시오.
따라서 1보다 작은 문자열 길이를 확인하는 기본 개념 외에 컨텍스트를 깊이 고려하는 것이 중요합니다. 사람이나 컴퓨터의 언어 또는 다른 방식으로 빈 문자열에 대한 다른 정의가있을 수 있으며 동일한 언어 내에서 추가 컨텍스트로 인해 의미가 더 변경 될 수 있습니다.
빈 문자열은 "현재 컨텍스트에서 중요한 문자를 포함하지 않는 문자열"을 의미한다고 가정합니다.
색상 및 배경색이 속성 문자열에서 동일하므로 시각적으로 의미 할 수 있습니다. 효과적으로 비 웁니다.
이것은 의미있는 문자가 없음을 의미 할 수 있습니다. 모든 점 또는 모든 대시 또는 모든 밑줄은 비어있는 것으로 간주 될 수 있습니다. 또한 의미있는 유효 문자가 비어 있으면 독자가 이해하는 문자가없는 문자열을 의미 할 수 있습니다. 독자에게 무의미한 것으로 정의 된 언어 또는 문자 집합의 문자 일 수 있습니다. 우리는 문자열이 주어진 언어에서 알려진 단어를 형성하지 않는다고 다르게 정의 할 수 있습니다.
우리는 empty가 glyphs에서 음수 공간의 백분율 함수라고 말할 수 있습니다.
일반적인 시각적 표현이없는 일련의 인쇄 할 수없는 문자조차도 실제로 비어 있지는 않습니다. 컨트롤 캐릭터가 떠 오릅니다. 특히 낮은 ASCII 범위 (많은 시스템을 호스로 사용하고 일반적으로 글리프가없고 시각적 메트릭이 없기 때문에 공백이 아니므로 아무도 언급하지 않았습니다.) 그러나 문자열 길이는 0이 아닙니다.
결론. 여기서 길이 만 측정하는 것은 아닙니다. 상황 별 멤버십도 매우 중요합니다.
문자 집합 멤버쉽은 매우 중요한 공통 추가 측정입니다. 의미있는 순서도 상당히 일반적입니다. (SETI 또는 crypto 또는 captchas라고 생각하십시오) 더 추상적 인 컨텍스트 세트가 더 있습니다.
따라서 문자열이 길이 또는 공백을 기준으로 비어 있다고 가정하기 전에 신중하게 생각하십시오.
NSDictionary 지원과 작은 변경 사항을 추가하는 매우 유용한 게시물
static inline BOOL isEmpty(id thing) {
return thing == nil
|| [thing isKindOfClass:[NSNull class]]
|| ([thing respondsToSelector:@selector(length)]
&& ![thing respondsToSelector:@selector(count)]
&& [(NSData *)thing length] == 0)
|| ([thing respondsToSelector:@selector(count)]
&& [thing count] == 0);
}
condenseToSingleNSData(id thing)
? expandToNSArray(id thing)
? 조만간, 당신은 어떤 종류의 수업을하는지 물어볼 것입니다.
- (BOOL)isEmpty:(NSString *)string{
if ((NSNull *) string == [NSNull null]) {
return YES;
}
if (string == nil) {
return YES;
}
if ([string length] == 0) {
return YES;
}
if ([[string stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0) {
return YES;
}
if([[string stringByStrippingWhitespace] isEqualToString:@""]){
return YES;
}
return NO;
}
stringByStrippingWhitespace
가장 좋은 방법은 카테고리를 사용하는 것입니다.
다음 기능을 확인할 수 있습니다. 확인할 모든 조건이 있습니다.
-(BOOL)isNullString:(NSString *)aStr{
if([(NSNull *)aStr isKindOfClass:[NSNull class]]){
return YES;
}
if ((NSNull *)aStr == [NSNull null]) {
return YES;
}
if ([aStr isKindOfClass:[NSNull class]]){
return YES;
}
if(![[aStr stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length]){
return YES;
}
return NO;
}
아래 코드를 사용하여 빈 문자열을 확인했습니다.
//Check if we have any search terms in the search dictionary.
if( (strMyString.text==(id) [NSNull null] || [strMyString.text length]==0
|| strMyString.text isEqual:@"")) {
[AlertView showAlert:@"Please enter a valid string"];
}
//Different validations:
NSString * inputStr = @"Hey ";
//Check length
[inputStr length]
//Coming from server, check if its NSNull
[inputStr isEqual:[NSNull null]] ? nil : inputStr
//For validation in allowed character set
-(BOOL)validateString:(NSString*)inputStr
{
BOOL isValid = NO;
if(!([inputStr length]>0))
{
return isValid;
}
NSMutableCharacterSet *allowedSet = [NSMutableCharacterSet characterSetWithCharactersInString:@".-"];
[allowedSet formUnionWithCharacterSet:[NSCharacterSet decimalDigitCharacterSet]];
if ([inputStr rangeOfCharacterFromSet:[allowedSet invertedSet]].location == NSNotFound)
{
// contains only decimal set and '-' and '.'
}
else
{
// invalid
isValid = NO;
}
return isValid;
}
두 가지 방법으로 빈 문자열을 가질 수 있습니다.
1) @ ""// 공백을 포함하지 않습니다
2) @ ""// 공간을 포함
기술적으로 두 문자열은 모두 비어 있습니다. ONE Condition 을 사용하여 두 가지를 모두 쓸 수 있습니다.
if ([firstNameTF.text stringByReplacingOccurrencesOfString:@" " withString:@""].length==0)
{
NSLog(@"Empty String");
}
else
{
NSLog(@"String contains some value");
}
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
NSLog(@"String is empty");
}
else{
NSLog(@"String is not empty");
}
str.length
경우 str
는 예외를 throw합니다 .
@"\u200B"
(유니 코드 문자 ZERO WIDTH SPACE 로만 구성 하십시오 . 인쇄하면 0 문자를 인쇄하지만 ( 단일 공백 글꼴을 사용하여 확인) string.length는 1을 제공합니다. OBJECT REPLACEMENT CHARACTER 와 같은 다른 유니 코드 문자 도 이와 유사하게 작동합니다. PDF 텍스트를 파싱 할 때 후자를 얻으십시오