我在响应中调用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
那么如何检查字符串是否为空? 感谢。
答案 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
}
}