Как я могу проверить, имеет ли строка пустое значение? - PullRequest
1 голос
/ 16 мая 2011

извините, но я все еще пытаюсь заставить этот код работать.Это работает, если с двухзначным числом, но сбой с однозначным числом.Как я могу проверить, имеет ли NSString * secDigit значение или ноль.Я надеюсь, что мой вопрос ясен.Заранее спасибо.

NSString *depositOverTotalRwy = [NSString stringWithFormat:@"%@", [deposit text]];
NSArray *components = [depositOverTotalRwy
                       componentsSeparatedByString:@"/"];
NSString *firstThird = [components objectAtIndex:0];

    char firstChar = [firstThird characterAtIndex:0];
    char secChar = [firstThird characterAtIndex:1];
    NSString *firstDigit = [NSString stringWithFormat:@"%c",firstChar];
NSString *secDigit = [NSString stringWithFormat:@"%c", secChar];

    NSLog(@" i'm %@", firstDigit);
    NSLog(@" i'm %@", secDigit);

if ([firstDigit  isEqualToString: @"1"]) {
    firstDigit=@"wet";
    NSLog(@"wet");
}
if ([firstDigit  isEqualToString: @"2"]) {
    firstDigit=@"wet";
    NSLog(@"snow");

}
if ([firstDigit  isEqualToString: @"3"]) {
    firstDigit=@"wet";
    NSLog(@"ice");
    }

if ([secDigit  isEqualToString: @"1"]) {
    secDigit=@"wet";
    NSLog(@"wet");
}
if ([secDigit  isEqualToString: @"2"]) {
    secDigit=@"snow";

    NSLog(@"snow");
}
if ([secDigit  isEqualToString: @"3"]) {
    secDigit=@"ice";
    NSLog(@"ice");
}

спасибо всем вам ... вот мой код (работает сейчас):

   NSString *depositOverTotalRwy = [NSString stringWithFormat:@"%@", [deposit text]];
NSArray *components = [depositOverTotalRwy
                       componentsSeparatedByString:@"/"];
NSString *firstThird = [components objectAtIndex:0];

    char firstChar = [firstThird characterAtIndex:0];
    NSString *firstDigit = [NSString stringWithFormat:@"%c",firstChar];

    NSLog(@" i'm %@", firstDigit);

if ([firstDigit  isEqualToString: @"1"]) {
    firstDigit=@"wet";
    NSLog(@"wet");
}
if ([firstDigit  isEqualToString: @"2"]) {
    firstDigit=@"wet";
    NSLog(@"snow");

}
if ([firstDigit  isEqualToString: @"3"]) {
    firstDigit=@"wet";
    NSLog(@"ice");
    }
if ([firstThird length] >1) {
    char secChar = [firstThird characterAtIndex:1];
    NSString *secDigit = [NSString stringWithFormat:@"%c", secChar];


if ([secDigit  isEqualToString: @"1"]) {
    secDigit=@"wet";
    NSLog(@"wet");
}
if ([secDigit  isEqualToString: @"2"]) {
    secDigit=@"snow";

    NSLog(@"snow");
}
if ([secDigit  isEqualToString: @"3"]) {
    secDigit=@"ice";
    NSLog(@"ice");
}
}

Ответы [ 4 ]

1 голос
/ 16 мая 2011

Вы можете проверить количество символов в строке, используя длину NSString. и измени свой код в

NSString *depositOverTotalRwy = [NSString stringWithFormat:@"%@", @"23"];
NSArray *components = [depositOverTotalRwy
                       componentsSeparatedByString:@"/"];
NSString *firstThird = [components objectAtIndex:0];


unichar firstChar;
unichar secChar;

if([firstThird length]>1){
    firstChar = [firstThird characterAtIndex:0];
    secChar = [firstThird characterAtIndex:1];
} else {
    firstChar = [firstThird characterAtIndex:0];
    secChar = 0;
}

switch (firstChar) {
    case '1': /* Do your stuff*/break;
    case '2': /* Do your stuff*/break;
    case '3': /* Do your stuff*/break;           
    default:
        break;
}

switch (secChar) {
    case '1': /* Do your stuff*/break;
    case '2': /* Do your stuff*/break;
    case '3': /* Do your stuff*/break;           
    default:
        break;
}

вы можете использовать unichar вместо char. И может выполнить проверку в заявлениях переключателя. Если вы используете char, приведение происходит от unichar к char, и для некоторых персонажей вы можете потерять действительное значение. Так что безопасно использовать unichar ...

Если вы хотите преобразовать Unichar в строку, просто код NSString * stringChar = [NSString StringWithFormat:@"%C",unicharVariable];

Вот так ...

1 голос
/ 16 мая 2011

Согласно этому

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString.html

NSString "Вызывает исключение NSRangeException, если индекс находится за концом получателя"

Итак, ваш код:

char secChar = [firstThird characterAtIndex:1];

Это проблема (вы должны увидеть это в консоли отладчика)

Сначала проверьте длину с помощью

  if ([firstThird length] < 2) {
       // handle the case where it is one digit
  }
1 голос
/ 16 мая 2011

Полагаю, ваш код вылетает в этой строке:

char secChar = [firstThird characterAtIndex:1];

Это потому, что вы пытаетесь получить доступ к символу за пределами строковых границ.Вы должны защититься от этого, проверив сначала длину строки:

if ([firstThird count] > 1) {
    // String has 2 or more characters, do all the stuff that involves
    // a second character.
    char secChar = [firstThird characterAtIndex:1];
    NSString *secDigit = [NSString stringWithFormat:@"%c", secChar];

    if ([secDigit  isEqualToString: @"1"]) {
        secDigit=@"wet";
        NSLog(@"wet");
    }
}

Но я также хотел бы рекомендовать не использовать здесь строку NSSt, поскольку у вас уже есть char.Просто сделайте что-то вроде этого:

if ([firstThird count] > 1) {
    // String has 2 or more characters, do all the stuff that involves
    // a second character.
    char secChar = [firstThird characterAtIndex:1];

    if (secChar == '1') {
        secDigit=@"wet";
        NSLog(@"wet");
    }
}
1 голос
/ 16 мая 2011

Я думаю, это то, что вы ищете:

char secChar;
if(firstThird.length > 1)
{
    secChar = [firstThird characterAtIndex:1];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...