我正在尝试制作一个自动更正系统,当用户输入一个大写字母的单词时,自动更正不起作用。为了解决这个问题,我复制了键入的字符串,应用了. lowercasestring,然后比较它们。如果字符串确实输入错误,则应该更正单词。然而,取而代之的单词都是小写的。所以我需要对第一个字母应用. uppercasestring。我本来觉得我可以用
nameOfString[0]
但这显然行不通。我怎么能得到字符串的第一个字母大写,然后能够打印完整的字符串与第一个字母大写?
谢谢你的帮助!
我正在尝试制作一个自动更正系统,当用户输入一个大写字母的单词时,自动更正不起作用。为了解决这个问题,我复制了键入的字符串,应用了. lowercasestring,然后比较它们。如果字符串确实输入错误,则应该更正单词。然而,取而代之的单词都是小写的。所以我需要对第一个字母应用. uppercasestring。我本来觉得我可以用
nameOfString[0]
但这显然行不通。我怎么能得到字符串的第一个字母大写,然后能够打印完整的字符串与第一个字母大写?
谢谢你的帮助!
当前回答
Swift 5.1或更高版本
extension StringProtocol {
var firstUppercased: String { prefix(1).uppercased() + dropFirst() }
var firstCapitalized: String { prefix(1).capitalized + dropFirst() }
}
斯威夫特5
extension StringProtocol {
var firstUppercased: String { return prefix(1).uppercased() + dropFirst() }
var firstCapitalized: String { return prefix(1).capitalized + dropFirst() }
}
"Swift".first // "S"
"Swift".last // "t"
"hello world!!!".firstUppercased // "Hello world!!!"
"DŽ".firstCapitalized // "Dž"
"Dž".firstCapitalized // "Dž"
"dž".firstCapitalized // "Dž"
其他回答
字符串中的第一个字符大写
extension String {
var capitalizeFirst: String {
if self.characters.count == 0 {
return self
return String(self[self.startIndex]).capitalized + String(self.characters.dropFirst())
}
}
从Swift 3你可以很容易地使用 文本框。autocapitalizationType = uitextautocapitalizationtype .sentence
下面是Swift 5的一个版本,如果第一个字母已经是大写,或者没有大小写的概念,使用Unicode标量属性API来保释:
extension String {
func firstLetterUppercased() -> String {
guard let first = first, first.isLowercase else { return self }
return String(first).uppercased() + dropFirst()
}
}
Swift 4 (Xcode 9.1)
extension String {
var capEachWord: String {
return self.split(separator: " ").map { word in
return String([word.startIndex]).uppercased() + word.lowercased().dropFirst()
}.joined(separator: " ")
}
}
结合上面的答案,我写了一个小扩展,大写每个单词的第一个字母(因为这是我正在寻找的,并认为其他人可以使用它)。
我谦卑地提出:
extension String {
var wordCaps:String {
let listOfWords:[String] = self.componentsSeparatedByString(" ")
var returnString: String = ""
for word in listOfWords {
if word != "" {
var capWord = word.lowercaseString as String
capWord.replaceRange(startIndex...startIndex, with: String(capWord[capWord.startIndex]).uppercaseString)
returnString = returnString + capWord + " "
}
}
if returnString.hasSuffix(" ") {
returnString.removeAtIndex(returnString.endIndex.predecessor())
}
return returnString
}
}