В моем последнем проекте я динамически строю предложения, а затем, по факту, перебираю текст, чтобы грамматически «очистить вещи». Одна из моих задач - переключить вхождения «а» на «ан», где первая буква следующего слова - гласная. На данный момент меня интересуют только слова языка Engli sh в нижнем регистре, и я игнорирую следующие слова, начинающиеся с 'h'.
Решение, которое у меня есть, теперь работает, но выглядит ужасно неэффективно и определенно не будет масштабироваться, если я захочу поддержать интернационализацию в будущем.
if ([destination rangeOfString:@" a "].location != NSNotFound) {
destination = [destination stringByReplacingOccurrencesOfString:@" a a" withString:@" an a"];
destination = [destination stringByReplacingOccurrencesOfString:@" a e" withString:@" an e"];
destination = [destination stringByReplacingOccurrencesOfString:@" a i" withString:@" an i"];
destination = [destination stringByReplacingOccurrencesOfString:@" a o" withString:@" an o"];
destination = [destination stringByReplacingOccurrencesOfString:@" a u" withString:@" an u"];
}
Я проверяю случай «а» заранее, просто чтобы пропустить неэффективность всех этих замещающих линий. Я думаю, что должен быть способ сделать это более гладким, более эффективным способом, возможно, используя регулярные выражения?