2011-12-21 3 views
-1

Мне нужно добавить пробел после каждых 4 символов в строке. Например, если строка aaaaaaaa, мне нужно отформатировать ее как aaaa aaaa. Я попробовал следующий код, но он не работает для меня.Формат строки в IPhone

NSMutableString *currentFormattedString = [[NSMutableString alloc] initWithString:formattedString]; 

    int count = [formattedString length]; 

    for (int i = 0; i<count; i++) { 
     if (i %4 == 0) { 
      [currentFormattedString insertString:@" " atIndex:i]; 

     } 

    } 

Может ли кто-нибудь помочь мне с этим?

+0

Прежде всего найдите длину своей строки. Вставьте свою строку в цикл и сделайте условие согласно. что после каждых 4 символов должно быть пробелы. Просто. – Sarah

ответ

0

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

Telephone number string formatting

1
NSString *text = [[NSString alloc] initWithString:@"aaaaaaaa"]; 
    NSString *result = [[NSString alloc] init]; 
    double count = text.length/4; 
    if (count>1) { 
    for (int i = 0; i<count; i++) { 
     result = [NSString stringWithFormat:@"%@%@ ",result,[text substringWithRange:NSMakeRange(i*4, 4)]]; 
    } 
    result = [NSString stringWithFormat:@"%@%@ ",result,[text substringWithRange:NSMakeRange(((int)count)*4, text.length-((int)count)*4)]]; 
    } 
    else result = text; 
+0

Имейте в виду, что это работает только в том случае, если исходная длина строки кратна 4. –

+0

исправленный и измененный ответ – SentineL

1

Вы не сказали, что ISN не работая с вашим кодом, поэтому трудно точно знать, что ответить. В качестве подсказки - в будущем вопросы не просто говорят «это не работает», но состояние ЧТО не работает и КАК оно не работает. Однако ...

NSMutableString *currentFormattedString = [[NSMutableString alloc] initWithString:formattedString]; 

int count = [formattedString length]; 


for (int i = 0; i<count; i++) { 
    if (i %4 == 0) { 
     [currentFormattedString insertString:@" " atIndex:i]; 

    } 

} 

Вы вводите пробел, но тогда вы не учитываете это в своем значении индекса. Итак, предположим, что ваш formattedString является aaaaaaaaaaaaaaaa Первый раз через петлю, вы получите 4-е место и вставить пробел при г = 4

аааа AAAAAAAAAAAA

Теперь в следующий раз, когда вы получите, чтобы вставить пробел , я буду 8. Но восьмое место в вашей currentFormattedString не там, где вы думаете, это будет

аааа ааа ааааааааа

в следующий раз это будет еще 4-х символов, по которым до сих пор не там, где вы думаете

аааа ааа аа ааааааа

И так далее

Вы должны принять во внимание вставленного пространства, которое будет влиять на величину смещения.

0

Ник Булл ответил на причины, по которым ваш метод сломался уже.
IMHO подходящим решением было бы использовать цикл while и делать шаги цикла самостоятельно.

NSInteger i = 4; // first @" " should be inserted after the 4th (index = 3) char 
while (i < count) { 
    [currentFormattedString insertString:@" " atIndex:i]; 
    count ++; // you did insert @" " so the length of the string increased 
    i += 5; // you now must skip 5 (" 1234") characters 
} 
Смежные вопросы