Как извлечь числовое значение из строки? - PullRequest
3 голосов
/ 21 мая 2010

Можно ли извлечь число из строки. Например, у меня есть строка:

my name is shishir and my number is 98890876478

Можно ли извлечь 98890876478 из приведенной выше строки?

Или, если моя строка:

my name is shishir and my number is XXX98890876478XXX

В этом состоянии я могу извлечь `98890876478", который находится между XXX.

Возможно ли это сделать?

Я получаю сообщение от сервера в формате, указанном выше, и мне нужно числовое значение для дальнейших операций

Edit:

Вот код, который я пытаюсь использовать:

NSString *logString = [NSString stringWithFormat:@"%@",theXML]; 
NSString *digits = [logString stringByTrimmingCharactersInSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]]; 
NSLog(@"Message id: %i", [digits intValue]);

который выводит:

2010-05-21 16:37:07.092 sms[5311:207] OK: message-ID XXX110103468XXX
2010-05-21 16:37:07.851 sms[5311:207] Message id: 2

Я думаю, что он возвращает два, потому что размер == 2. Мне нужно получить значение между "XXX".

Ответы [ 5 ]

7 голосов
/ 21 мая 2010

Я думаю, что вам нужен NSScanner, он позволяет вынимать части строки.

, например

int n;
NSScanner * scanner = [[NSScanner alloc] initWithString:@"Your string 1234"];
[scanner scanInt:&n];
1 голос
/ 05 декабря 2014

Автономный раствор:

+ (NSString *)extractNumberFromText:(NSString *)text
{
  NSCharacterSet *nonDigitCharacterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
  return [[text componentsSeparatedByCharactersInSet:nonDigitCharacterSet] componentsJoinedByString:@""];
}

Обрабатывает следующие случаи:

  • @"1234"@"1234"
  • @"001234"@"001234"
  • @"leading text get removed 001234"@"001234"
  • @"001234 trailing text gets removed"@"001234"
  • @"a0b0c1d2e3f4"@"001234"

Надеюсь, это поможет!

1 голос
/ 21 мая 2010

Для этого вы можете использовать регулярное выражение: вы хотите сопоставить \d+, то есть ненулевую последовательность цифр.

Похожие вопросы


В противном случае вы можете просто вручную просмотреть символы в строке и найти любую непрерывную последовательность цифр.

0 голосов
/ 07 февраля 2014

stringByTrimmingCharactersInSet просто удаляет символ в конце или начале строки.

пример: "abc 10 cd" -> 10 (это будет работать)

пример: "abc 10 a 1" -> "10 a 1" (не будет работать)

Использование регулярных выражений кажется лучшей идеей.

iphone sdk - Удалить все символы, кроме цифр 0-9, из строки

EDIT:

Отметьте не принятый ответ, а тот, у которого более 50 голосов

NSString * number = @"(555) 555-555 Office";
NSString * strippedNumber = [number stringByReplacingOccurrencesOfString:@"[^0-9]" withString:@"" options:NSRegularExpressionSearch range:NSMakeRange(0, [number length])];
0 голосов
/ 24 мая 2010

ЭТО ТО, ЧЕМ Я НАКОНЕЦ СДЕЛАН *

NSString *newString = [[theXML componentsSeparatedByCharactersInSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]] componentsJoinedByString:@""];
----------------------------------------

NSString *newStr = [newString substringWithRange:NSMakeRange(1, [newString length]-1)];
----------------------------------------

И я закончил.

...