String 它';除了Swift中的某些单词外,是否可以将字符串转换为大写?
我想将字符串转换为标题大小写,但不包括一些不需要更改的单词,如产品、服务和其他商标名称 使用此代码:String 它';除了Swift中的某些单词外,是否可以将字符串转换为大写?,string,swift,String,Swift,我想将字符串转换为标题大小写,但不包括一些不需要更改的单词,如产品、服务和其他商标名称 使用此代码: var storyTtitle = "Presented the new PowerBook" let newStr = str.capitalizedStringWithLocale(NSLocale.currentLocale()) 这里的结果是:“呈现了新的Powerbook”,不幸的是更改了“Powerbook”一词,在这种情况下,这是一个错误。有人知道有没有办法排除某些单词,可能包含
var storyTtitle = "Presented the new PowerBook"
let newStr = str.capitalizedStringWithLocale(NSLocale.currentLocale())
这里的结果是:“呈现了新的Powerbook”,不幸的是更改了“Powerbook”一词,在这种情况下,这是一个错误。有人知道有没有办法排除某些单词,可能包含在列表中吗?我希望这能有所帮助。有几个不同的函数用于将字符串大写。我想这就是你想要的
var storyTtitle: String = "Presented the new PowerBook"
var newStr: String = ""
var listToExclude: [String] = ["PowerBook"]
var stringArray: [String] = storyTtitle.componentsSeparatedByString(" ")
for str in stringArray {
for excludeStr in listToExclude {
if !str.containsString(excludeStr) {
newStr.appendContentsOf(str.localizedCapitalizedString)
if str != stringArray.last {
newStr.appendContentsOf(" ")
}
}
}
}
print(newStr)
您可以将
EnumerateSubstringsRange()
与ByWords一起使用
枚举字符串中所有单词的选项。这有好处
即使单词不由分隔符分隔,它也能正常工作
空格字符
你的想法来自上面的评论
已经包含大写字母的单词(如iPhone、OS X、Xcode、MacBook、iOS)不会更改,而所有不包含大写字母的单词可能会更改
然后可以这样实现:
let storyTtitle = "Presented 'the' new PowerBook! (or iPhone?)"
var newTitle = storyTtitle
var offset = 0
storyTtitle.enumerateSubstringsInRange(storyTtitle.characters.indices, options: .ByWords) {
(substring, substringRange, _, _) in
if let oldString = substring where oldString == oldString.lowercaseString {
let range = substringRange.startIndex.advancedBy(offset) ..< substringRange.endIndex.advancedBy(offset)
let newString = oldString.capitalizedString
newTitle.replaceRange(range, with: newString)
offset += newString.characters.count - oldString.characters.count
}
}
print(newTitle)
// Presented 'The' New PowerBook! (Or iPhone?)
let storytitle=“展示”新的PowerBook!(或iPhone?)
var newTitle=故事情节
var偏移量=0
Storytitle.EnumerateSubstringsRange(Storytitle.characters.Index,选项:。ByWords){
(子字符串,子字符串范围,,)in
如果让oldString=substring,其中oldString==oldString.lowercasesetring{
让range=substringRange.startIndex.advancedBy(偏移量)…
偏移量
变量和“复杂”范围计算
必需,因为字符串的大写版本不是
必须具有与小写版本相同的字符数。
例如,在德语中,“ß”
的大写字符串是“SS”
Mm,它不完全相同。将一个可以包含许多单词的字符串大写,并根据区域设置进行操作,这与将单个单词大写不同。谢谢Sethmr。不幸的是,您的代码打印的是“Presented The New”,实际上它应该是:“Presented The New PowerBook”。这是因为PowerBook在我的示例中被排除在外。啊,好的,我明白了。谢谢。你真的想要一个排除列表,还是只想大写首字母,而保持其余字符不变?嗨,maddy,我考虑过了,如果可能的话,最好不要使用排除列表。然后进一步提出你的理由,也许有一种不用它的方式:已经包含大写字母的单词(如iPhone、OS X、Xcode、MacBook、iOS)不会更改,而所有不包含大写字母的单词都可能更改。真正出色的马提尼注意到一个小烦恼:“1970年代”成为“70年代”,你认为有办法避免吗?@Tel:说得对。不幸的是,我目前没有一个好主意。