【发布时间】:2015-03-25 16:28:14
【问题描述】:
是否有将字符串中的每个单词大写的功能还是手动过程?
例如“鲍勃很高” 我想要“鲍勃很高”
肯定有一些东西,但我发现的 Swift IOS 答案似乎都没有涵盖这一点。
【问题讨论】:
-
var someString = "lol" ; someString.capitalized // “哈哈”
-
其他一些人在下面详细介绍了此选项。 ;)
是否有将字符串中的每个单词大写的功能还是手动过程?
例如“鲍勃很高” 我想要“鲍勃很高”
肯定有一些东西,但我发现的 Swift IOS 答案似乎都没有涵盖这一点。
【问题讨论】:
讨论
将每个单词中第一个字符的字符串更改为其对应的大写值,并将所有剩余字符设置为其对应的小写值。
和/或capitalizedStringWithLocale(_:)
使用指定的语言环境返回接收者的大写表示。
对于呈现给用户的字符串,传递当前语言环境 ([NSLocale currentLocale])。要使用系统语言环境,请传递 nil。
【讨论】:
斯威夫特 3:
var lowercased = "hello there"
var stringCapitalized = lowercased.capitalized
//prints: "Hello There"
【讨论】:
从 iOS 9 开始提供本地化大写功能,因为大写字母可能因语言而异。
if #available(iOS 9.0, *) {
"istanbul".localizedCapitalizedString
// In Turkish: "İstanbul"
}
【讨论】:
localizedCapitalized,对于 ObjC,它是 localizedCapitalizedString。
上面提供的答案示例。
var sentenceToCap = "this is a sentence."
println(sentenceToCap.capitalizedStringWithLocale(NSLocale.currentLocale()) )
最终结果是一个字符串“This Is A Sentence”
【讨论】:
对于 Swift 3,它已更改为 capitalized。
讨论
此属性执行规范(非本地化)映射。它适用于需要稳定结果而不依赖于当前语言环境的编程操作。 大写字符串是将每个单词中的第一个字符更改为其相应的大写值,并将所有其余字符设置为其相应的小写值的字符串。 “单词”是由空格、制表符或行终止符分隔的任何字符序列(列在 getLineStart(_:end:contentsEnd:for:) 下)。不考虑一些常见的单词分隔标点符号,因此此属性通常可能不会为多字字符串产生所需的结果。 不保证大小写转换是对称的或生成与原始字符串长度相同的字符串。请参阅小写的示例。
【讨论】:
有一个内置函数
nameOfString.capitalizedString
这将大写字符串的每个单词。仅大写您可以使用的第一个字母:
nameOfString.replaceRange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalizedString)
【讨论】:
Swift 5 版本的Christopher Wade's answer
let str = "my string"
str.capitalized(with: NSLocale.current)
print(str) // prints My String
【讨论】:
这是我想出的似乎可行的方法,但我愿意接受任何更好的方法。
func firstCharacterUpperCase(sentenceToCap:String) -> String {
//break it into an array by delimiting the sentence using a space
var breakupSentence = sentenceToCap.componentsSeparatedByString(" ")
var newSentence = ""
//Loop the array and concatinate the capitalized word into a variable.
for wordInSentence in breakupSentence {
newSentence = "\(newSentence) \(wordInSentence.capitalizedString)"
}
// send it back up.
return newSentence
}
或者如果我想将其用作字符串类的扩展。
extension String {
var capitalizeEachWord:String {
//break it into an array by delimiting the sentence using a space
var breakupSentence = self.componentsSeparatedByString(" ")
var newSentence = ""
//Loop the array and concatinate the capitalized word into a variable.
for wordInSentence in breakupSentence {
newSentence = "\(newSentence) \(wordInSentence.capitalizedString)"
}
// send it back up.
return newSentence
}
}
再次,欢迎任何更好的东西。
【讨论】: