2014-09-03 2 views
0

Мое приложение помещает пробел после «:» в случае, если пользователь забудет. Например:Как заменить замененный NSString некоторые старые символы?

input = [input stringByReplacingOccurrencesOfString:@":" withString:@": "]; 

Это хорошо работает, если они печатают на английском языке. Это сделает «Мои друзья: Джеймс» в «Мои друзья: Джеймс ...», и все в порядке.

НО проблема, с которой я столкнулась, - это также реклама места за время. Это сделает «12:30» в «12: 30». Я мог бы собрать кучу этих кодов со всеми возможными возможностями для исправления, что слишком много.

input = [input stringByReplacingOccurrencesOfString:@": 0" withString:@":0"]; 

Что такое более простой способ сделать это? Я пробовал:

input = [input stringByReplacingOccurrencesOfString:@"\\b\\d\\d?:\\s\\d\\d\\b" withString:@"\\b\\d\\d?:\\d\\d\\b" options: NSRegularExpressionSearch range:NSMakeRange(0, [input length])]; 

Но все, что делает это изменить все времена от «чч: мм» до «BDD?: DDB» и это все. как сделать замену NSString сохранить предыдущие символы? Как я могу заставить его по-прежнему сохранять те же самые числа, которые были ранее поставлены? Все, что я хочу изменить, это «:», чтобы быть «:» за раз.

Я пробовал заявления «если» с помощью NSNotFound, но он не работал. Я хотел, чтобы, если он нашел формат «hh: mm», чтобы НЕ добавить пробел, но если это не так, добавьте пробел, но это не сработало.

+0

'NSRegularExpression' может быть решением. – Larme

ответ

1

Вы были на правые строки с последней версией, но вам нужно использовать NSRegularExpression. Следующие должны делать все это для вас (добавление пробелов после двоеточия, но не тогда, когда зажатый между двузначными цифрами или уже с последующим пробелом):

NSString *input = @"My friends are:James, John. It's 10:30 right now."; 
NSMutableString *workingString = [input mutableCopy]; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(((?<!(\\b\\d\\d)):)|(:(?!(\\d\\d\\b))))(?!\\s)" options:0 error:nil]; 
[regex replaceMatchesInString:workingString options:0 range:NSMakeRange(0, [workingString length]) withTemplate:@": "]; 
input = [workingString copy]; 
NSLog(@"%@", input); // Prints "My friends are: James, John. It's 10:30 right now." 
+0

Работает именно так, как я этого хотел! Кроме того, что было бы подходящим шаблоном, чтобы добавить пробел после «.», Но не тогда, когда число связано как 1.5.70094? Я работаю, просто заменяя «. 0» на «.0», но это проблема, если пользователь хочет начать предложение с номером. –

1

Вы можете сделать это в этом way..If вы либо время в строке или только предложения без каких-либо цифр ...

NSCharacterSet *s = [NSCharacterSet characterSetWithCharactersInString:@"1234567890"]; 

NSRange r = [input rangeOfCharacterFromSet:s]; 

if (r.location != NSNotFound) 
{ 
input = [input stringByReplacingOccurrencesOfString:@":" withString:@": "]; 
} 

Надеется, что это помогает ..

+0

Это работает, но мое приложение связано с тем, что пользователь вводит. Это не сработает, если они скажут: «Сейчас 10:30». Я думал больше о том, что у меня есть 2 NSStrings, 1 с пространством, и один без него. Я пробовал использовать stringWithFormat, но это не сработало. –

+0

Если строка - это 10:30 прямо сейчас. Затем также над работами .. Никакой замены строки не выполняется ..! – Vidhyanand

Смежные вопросы