Найти символы из заданной строки с цифрами.

Как с помощью NSScanner получить строку из строки, которая содержит не только числа, но и строку?

т.е. 001234852ACDSB

Результат должен быть 001234852 и ACDSB

Я могу получить числа из строки с помощью NSScanner и символы с помощью stringByReplacingOccurrencesOfString, но я хочу знать, возможно ли получить строку с помощью NSScanner или любых других встроенных методов?

Я хотел бы знать регулярное выражение для того же самого.


person alloc_iNit    schedule 30.07.2011    source источник
comment
Непонятно, о чем вы спрашиваете... вы хотите использовать NSScanner для получения строки из строки? Вы пытаетесь удалить все цифры и получить только буквы? Пожалуйста, приведите пример входных данных и ожидаемых результатов.   -  person BJ Homer    schedule 30.07.2011
comment
Кажется, он хочет отделить цифры от букв и в результате получить строку с цифрами и одну с буквами. Хотя он этого не говорит, я предполагаю, что числа находятся вместе в одной части строки, а буквы — в остальной части, или они чередуются.   -  person Rudy Velthuis    schedule 30.07.2011


Ответы (3)


Если вы можете гарантировать, что строка всегда состоит из цифр, за которыми следуют буквы, то вы можете сделать следующее с NSScanner:

NSScanner *scanner = [NSScanner scannerWithString:@"001234852ACDSB"];

NSString *theNumbers = nil;

[scanner scanCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet]
                    intoString:&theNumbers];

NSString *theLetters = nil;
[scanner scanCharactersFromSet:[NSCharacterSet letterCharacterSet]
                    intoString:&theLetters];

Регулярное выражение, фиксирующее те же самые вещи, будет выглядеть так:

([0-9]+)([a-zA-Z]+)
person BJ Homer    schedule 30.07.2011
comment
Спасибо, сэр. Этот код частично полезен для меня, потому что он совсем не гарантирует размещение цифр и букв. - person alloc_iNit; 30.07.2011

Наконец, после того, как я погуглил то же самое и просмотрел некоторую информацию из сети, я добрался до места назначения. При этом я публикую код, это может помочь многим, кто сталкивается с той же проблемой, что и я.

    NSString *str = @"001234852ACDSB";
    NSScanner *scanner = [NSScanner scannerWithString:str];

    // set it to skip non-numeric characters
    [scanner setCharactersToBeSkipped:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]];

    int i;
    while ([scanner scanInt:&i])
    {
        NSLog(@"Found int: %d",i);    //001234852
    }

    // reset the scanner to skip numeric characters
    [scanner setScanLocation:0];
    [scanner setCharactersToBeSkipped:[NSCharacterSet decimalDigitCharacterSet]];

    NSString *resultString;
    while ([scanner scanUpToCharactersFromSet:[NSCharacterSet decimalDigitCharacterSet] intoString:&resultString])
    {
        NSLog(@"Found string: %@",resultString);    //ACDSB
    }
person alloc_iNit    schedule 01.08.2011

Для этого не обязательно использовать сканер.

NSString *mixedString = @"01223abcdsadf";

NSString *numbers = [[mixedString componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"0123456789"] invertedSet]] componentsJoinedByString:@""];

NSString *characters = [[mixedString componentsSeparatedByCharactersInSet:[[NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnouprstuwvxyz"] invertedSet]] componentsJoinedByString:@""];

Для другого возможного решения просмотрите этот вопрос Удалить все, кроме чисел, из NSString

person Cyprian    schedule 30.07.2011
comment
Спасибо за ответ. Требовалось выполнить задание с помощью NSScanner, поэтому приходится играть в рамки. :) - person alloc_iNit; 30.07.2011
comment
Нп. просто посмотрите прикрепленную ссылку, в ней есть ответ с использованием сканера. - person Cyprian; 30.07.2011