我如何检查字符串是否包含未知字符?

时间:2013-10-06 05:40:28

标签: ios objective-c

我在响应中调用webservice我正在获取字符串。 当我在NSLog中打印字符串时,它返回空字符串,当我检查长度时,它返回1。

所以我的问题是如何检查字符串是否为空。

#define CHECK_NA_STRING(str) (str == (id)[NSNull null] || [str length] == 0)?@"N/A":str

NSLog(@"%@",CHECK_NA_STRING([dict objectForKey:@"ADDRESS_A"]));  // nothing empty string
NSLog(@"%d",[CHECK_NA_STRING([dict objectForKey:@"ADDRESS_A"]) length]); // return 1

那么如何检查字符串是否为空? 感谢。

2 个答案:

答案 0 :(得分:0)

如果字符串包含二进制零(空字符),则该字符串不被视为空。例如,尝试以下代码:

#define CHECK_NA_STRING(str) (str == (id)[NSNull null] || [str length] == 0)?@"N/A":str
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"\0" forKey:@"ADDRESS_A"];
NSLog(@"%@",CHECK_NA_STRING([dict objectForKey:@"ADDRESS_A"]));  // nothing empty string
NSLog(@"%d",[CHECK_NA_STRING([dict objectForKey:@"ADDRESS_A"]) length]); // return 1

第一个NSLOG没有打印,但第二个打印“1”。实际上,字符串是一个字符长;它只会弄乱你的NSLOG。

您可能希望测试一些有效的响应范围或一些无效范围。也许,你可以使用正则表达式。

答案 1 :(得分:0)

所以字符串只是一个空格?然后它的长度仍为1。

尝试:

NSString* string = ...;

if([string isKindOfClass:[NSString class]])
{
    NSCharacterSet* invertedWhitespaceSet = [[NSCharacterSet whitespaceAndNewlineCharacterSet] invertedSet];

    const NSRange nonEmptyCharacterRange = [string rangeOfCharacterFromSet:invertedWhitespaceSet options:NSCaseInsensitiveSearch];  

    if(nonEmptyCharacterRange.location == NSNotFound)
    {
        //  Empty invalid string    
    }
    else
    {
        //  Non-empty valid string
    }
}