Как проверить, если в Objective C? < <20 > пусто?
Вы можете проверить, есть ли [string length] == 0
. Это проверит, является ли она допустимой, но пустой строкой (@""), а также если она равна нулю, так как вызов length
на nil также вернет 0.
@"\u200B"
(состоящий только из символа Unicode ZERO WIDTH SPACE . При его печати будет напечатано 0 символов (проверьте, используя моноширинный шрифт), но string.length выдаст 1. Существуют другие символы Unicode (например, OBJECT REPLACEMENT CHARACTER ), которые вести себя так же. Вы можете получить последнее при разборе PDF-текста.
ZERO WIDTH SPACE
, на самом деле не имеет значения, потому что @"\u200B"
- это символ, тем не менее, поэтому, если вы проверите, чтобы строка была пустой, она скажет, что это не потому, что в ней есть символ. Это просто не для печати в соответствии со стандартом Unicode.
Ответ Marc правильный. Но я воспользуюсь возможностью, чтобы включить указатель на Wil Shipley, обобщенный isEmpty
, который он поделился с его blog:
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);
}
Первый подход действителен, но не работает, если ваша строка имеет пробелы (@" "
). Таким образом, вы должны очистить эти пробелы перед его тестированием.
Этот код очищает все пробелы с обеих сторон строки:
[stringObject stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ];
Одна хорошая идея - создать один макрос, поэтому вам не нужно набирать эту линию монстра:
#define allTrim( object ) [object stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet] ]
Теперь вы можете использовать:
NSString *emptyString = @" ";
if ( [allTrim( emptyString ) length] == 0 ) NSLog(@"Is empty!");
Одно из лучших решений, которое я когда-либо видел (лучше, чем у Matt G one), - это улучшенная встроенная функция, которую я взял на каком-то Git Hub repo (Wil Shipley one, но я не могу найти ссылку):
// Check if the "thing" pass'd 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);
}
Лучше использовать эту категорию:
@implementation NSString (Empty)
- (BOOL) empty{
return ([[self stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]length] == 0);
}
@end
Просто передайте строку следующему методу:
+(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;
}
Я положил это:
@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]}
не будет работать с категорией.
Другая опция - проверить, равно ли она @""
с isEqualToString:
следующим образом:
if ([myString isEqualToString:@""]) {
NSLog(@"myString IS empty!");
} else {
NSLog(@"myString IS NOT empty, it is: %@", myString);
}
Хотя это вопрос 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.")
}
}
Нормальная версия Swift String
let myString: String = ""
if myString.isEmpty {
print("String is empty.")
}
Смотрите также: Проверьте пустую строку в Swift?
У вас есть 2 способа проверить, является ли строка пустой или нет:
Предположим, что ваше имя строки 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
}
Выберите любой из указанных выше методов и узнайте, пустая строка или нет.
Возможно, этот ответ является дубликатом уже предоставленных ответов, но я сделал несколько изменений и изменений в порядке проверки условий. Пожалуйста, используйте приведенный ниже код:
+(BOOL)isStringEmpty:(NSString *)str
{
if(str == nil || [str isKindOfClass:[NSNull class]] || str.length==0) {
return YES;
}
return NO;
}
Просто используйте один из условий if
else
, как показано ниже:
Метод 1:
if ([yourString isEqualToString:@""]) {
// yourString is empty.
} else {
// yourString has some text on it.
}
Метод 2:
if ([yourString length] == 0) {
// Empty yourString
} else {
// yourString is not empty
}
Вы можете проверить, что ваша строка пуста или я не использую этот метод:
+(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, и объявления этого метода, чтобы вы могли использовать этот метод, просто назовите его через свое приложение.
Очень полезная почта, чтобы добавить поддержку 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)
? Рано или поздно вы будете спрашивать, с каким классом вы имеете дело, лучше сделать это при первом обращении.
Просто проверьте длину строки
if (!yourString.length)
{
//your code
}
сообщение NIL вернет nil или 0, поэтому нет необходимости тестировать nil:).
Счастливое кодирование...
Лучше всего использовать категорию.
Вы можете проверить следующую функцию. У которого есть все условия для проверки.
-(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;
}
- (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
Поэтому, помимо базовой концепции проверки длины строки менее 1, важно глубоко рассмотреть контекст. Языки человека или компьютер или другие могут иметь разные определения пустых строк и на тех же языках, дополнительный контекст может дополнительно изменить смысл.
Пусть говорят, что пустая строка означает "строка, которая не содержит символов, значимых в текущем контексте".
Это может означать визуально, так как цвет и цвет фона одинаковы в атрибутной строке. Эффективно пуст.
Это может означать пустые значащие символы. Все точки или все тире или все подчеркивания могут считаться пустыми. Кроме того, пустые значащие значащие символы могут означать строку, которая не имеет символов, которые понимает читатель. Они могут быть символами на языке или characterSet, которые для читателя не имеют смысла. Мы могли бы определить это несколько иначе, чтобы сказать, что строка не содержит известных слов на данном языке.
Можно сказать, что пустое является функцией процента отрицательного пространства в отображаемых глифах.
Даже последовательность непечатаемых символов без общего визуального представления не является действительно пустой. Управляющие символы приходят на ум. Особенно низкий диапазон ASCII (я удивлен, что никто не упоминал об этом, поскольку они шлепают множество систем и не являются пробелами, поскольку у них обычно нет глифов и нет визуальных показателей). Но длина строки не равна нулю.
Заключение. Здесь не единственная мера. Членство в контекстном наборе также очень важно.
Назначение набора символов - очень важная общая дополнительная мера. Значимые последовательности также довольно распространенные. (думаю, SETI или крипто или капча) Существуют также дополнительные абстрактные контекстные множества.
Поэтому тщательно подумайте, прежде чем предполагать, что строка пуста только по длине или пробелу.
Он работает как прелесть для меня
Если NSString
- s
if ([s isKindOfClass:[NSNull class]] || s == nil || [s isEqualToString:@""]) {
NSLog(@"s is empty");
} else {
NSLog(@"s containing %@", s);
}
//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;
}
Его так же просто, как if([myString isEqual:@""])
или if([myString isEqualToString:@""])
Я проверил пустую строку, используя код ниже:
//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"];
}
Вы можете легко проверить, является ли строка пустой:
if ([yourstring isEqualToString:@""]) {
// execute your action here if string is empty
}
проверьте это:
if ([yourString isEqualToString:@""])
{
NsLog(@"Blank String");
}
или
if ([yourString length] == 0)
{
NsLog(@"Blank String");
}
Надеюсь, это поможет.
if (string.length == 0) stringIsEmpty;
Лучший способ в любом случае - проверить длину данной строки. Для этого, если ваша строка - myString, тогда код:
int len = [myString length];
if(len == 0){
NSLog(@"String is empty");
}
else{
NSLog(@"String is : %@", myString);
}
if(str.length == 0 || [str isKindOfClass: [NSNull class]]){
NSLog(@"String is empty");
}
else{
NSLog(@"String is not empty");
}
str.length
вызовет исключение, если str
равен нулю.
if( [txtMobile.text length] == 0 )
{
[Utility showAlertWithTitleAndMessage: AMLocalizedString(@"Invalid Mobile No",nil) message: AMLocalizedString(@"Enter valid Mobile Number",nil)];
}