NSString - Преобразуйте в чистый алфавит только (т.е. удалите accents+punctuation),

Я склонен полагать, что бизнес-объекты должны выдать исключения, когда переданные значения, которые нарушают его бизнес-правила. Однако кажется, что архитектура winforms 2.0 привязки данных принимает противоположное и таким образом, большинство людей является направляющей-roaded в поддержку этой архитектуры.

я соглашаюсь с последним ответом shabbyrobe, что бизнес-объекты должны быть созданы, чтобы быть применимыми и работать правильно в нескольких средах и не только среде winforms, например, бизнес-объект мог использоваться в веб-сервисе типа SOA, интерфейсе командной строки, asp.net, и т.д. Объект должен вести себя правильно и защитить себя от недопустимых данных во всех этих случаях.

аспект, который часто пропускается, также, что происходит в управлении сотрудничеством между объектами в 1-1, 1-n или n-n отношения, должны они также принимать добавление недопустимых сотрудников и просто поддержите недопустимый флаг состояния, который должен быть проверен или если это активно отказывается добавлять недопустимое сотрудничество. Я должен признать, что я в большой степени под влиянием подхода Оптимизированного объектного моделирования (SOM) Jill Nicola и др., Но что еще логично.

следующая вещь состоит в том, как работать с формами окон. Я смотрю на создание обертки UI для бизнес-объектов для этих сценариев.

26
задан dandan78 25 June 2014 в 07:57
поделиться

4 ответа

NSString* finish = [[start componentsSeparatedByCharactersInSet:[[NSCharacterSet letterCharacterSet] invertedSet]] componentsJoinedByString:@""];
80
ответ дан 28 November 2019 в 06:00
поделиться

Рассмотрите возможность использования структуры RegexKit . Вы можете сделать что-то вроде:

NSString *searchString      = @"This is neat.";
NSString *regexString       = @"[\W]";
NSString *replaceWithString = @"";
NSString *replacedString    = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];

NSLog (@"%@", replacedString);
//... Thisisneat
4
ответ дан 28 November 2019 в 06:00
поделиться

Рассмотрите возможность использования NSScanner , и в частности методов -setCharactersToBeSkipped: (который принимает NSCharacterSet) и -scanString: intoString: (который принимает строку и возвращает отсканированную строку по ссылке).

Вы также можете соединить это с - [NSString localizedCompare:] или, возможно, - [NSString compare: options :] с опцией NSDiacriticInsensitiveSearch . Это может упростить удаление / замену акцентов, так что вы можете сосредоточиться на удалении знаков препинания, пробелов и т. Д.

Если вы должны использовать подход, подобный тому, который вы представили в своем вопросе, по крайней мере используйте NSMutableString и replaceOccurrencesOfString: withString : options: range: - это будет намного эффективнее, чем создание тонны почти идентичных автоматически выпущенных струн. Может случиться так, что простое сокращение количества выделений на некоторое время повысит производительность «в достаточной степени».

4
ответ дан 28 November 2019 в 06:00
поделиться

Перед использованием любого из этих решений не забудьте использовать decoposedStringWithCanonicalMapping для разложения любых букв с диакритическими знаками. Это превратит, например, é (U + 00E9) в e ́ (U + 0065 U + 0301). Затем, когда вы удалите не буквенно-цифровые символы, буквы без ударения останутся.

Причина, по которой это важно, заключается в том, что вы, вероятно, не хотите, чтобы, скажем, «dän» и «dün» * рассматривались как такой же. Если вы удалили все буквы с диакритическими знаками, как это могут делать некоторые из этих решений, вы получите «dn», поэтому эти строки будут сравниваться как равные.

Итак, вы должны сначала разложить их, чтобы вы могли удалить акценты и оставьте буквы.

* Пример с немецкого. Спасибо Йорису Веймару за его предоставление.

39
ответ дан 28 November 2019 в 06:00
поделиться
Другие вопросы по тегам:

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