objective-c - 在 Objective-C 中将大写字符串转换为标题大小写

标签 objective-c string casing

我创建了以下方法,该方法首先使用 NSString 上的内置 ConvertStringToTitleCase 方法,但它实际上只是将每个单词的第一个字母大写。我在 .NET 中看到有一个 TextInfo.ToTitleCase 方法,它尝试了我想用 Objective-C 做的事情,但也达不到要求。

http://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx

我写的启动方法如下。如何正确处理大写字符串的大小写?转换为所有大写/小写的单词数据库会有帮助吗?

- (NSString *)convertStringToTitleCase:(NSString *)str {
    NSMutableString *convertedStr = [NSMutableString stringWithString:[str capitalizedString]];

    NSRange range = NSMakeRange(0, convertedStr.length);

    // a list of words to always make lowercase could be placed here
    [convertedStr replaceOccurrencesOfString:@" De " 
                                  withString:@" de " 
                                     options:NSLiteralSearch 
                                       range:range];

    // a list of words to always make uppercase could be placed here
    [convertedStr replaceOccurrencesOfString:@" Tv " 
                                  withString:@" TV " 
                                     options:NSLiteralSearch 
                                       range:range];

    return convertedStr;
}

最佳答案

如注释中所述,您引用的 .NET 方法不执行“正确的”标题大小写(即遵循全部大写或全部小写的异常(exception)单词列表),因此 -[NSString CapitalizedString] 与您所得到的等效。如果您想要异常(exception)词,则必须编写自己的方法(或找到其他人,如 google search for NSString "title case" 可能)。

你的标题大小写的“正确”程度取决于你愿意抛出多少异常词。您希望它支持多少英语?其他语言呢?它还取决于您在分析单词边界方面走了多远——您可能希望“TV”保持全大写,无论它是否在引号中、在句子末尾等,但您也可能不这样做不希望“you've”变成“You'Ve”。

如果您想处理异常词,则重复运行 replaceOccurrencesOfString... 的计划会随着异常词越多而变慢。 (此外,在搜索/替换字符串中使用空格意味着您没有考虑您可能想要的其他单词边界。)

考虑 NSRegularExpression 可能会很有用,因为正则表达式已经具有非常强大的大小写和单词边界概念。如果这对您来说效果不佳,那么使用扫描器读取输入字符串同时生成转换后的输出字符串将比运行多个搜索/替换操作更有效。

关于objective-c - 在 Objective-C 中将大写字符串转换为标题大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10180035/

相关文章:

ios - 如何在 ios Swift 语言的 uiimageview 中设置动画和填充颜色?

objective-c - 如何在 Kiwi 中 stub 方法 block ?

c - 如何限制C中的scanf函数在输入太长时打印错误?

java - 减少字符串

.net - 为什么DB是首字母缩略词而不是缩写词?

ios - 在我的应用程序上模仿 iOS 7 的主屏幕搜索栏

iphone - 为什么 MKStoreKit isSubscriptionActive 方法总是返回 NO?

string - 如何将字符串向量传递给 clojure 中的 java.shell?

url - URL路径的大小写和间距的最佳做法是什么?

MySQL 自动将字符串转换/转换为数字?