我正在尝试创建一个自动更正系统,当用户键入带有大写字母的单词时,自动更正功能不起作用。为了解决这个问题,我制作了一个字符串类型的副本,应用了.lowercaseString,然后对它们进行了比较。如果字符串确实是错误的,它应该纠正这个词。然而,替换键入的单词的单词都是小写的。所以我需要将.uppercaseString仅应用于第一个字母。我原本以为我可以用
nameOfString[0]
但这显然不起作用。如何将字符串的第一个字母设置为大写,然后能够打印第一个字母大写的完整字符串?
感谢您的帮助!
答案 0 :(得分:462)
包括与API指南一致的变异和非变异版本。
斯威夫特3:
extension String {
func capitalizingFirstLetter() -> String {
let first = String(characters.prefix(1)).capitalized
let other = String(characters.dropFirst())
return first + other
}
mutating func capitalizeFirstLetter() {
self = self.capitalizingFirstLetter()
}
}
Swift 4:
extension String {
func capitalizingFirstLetter() -> String {
return prefix(1).uppercased() + self.lowercased().dropFirst()
}
mutating func capitalizeFirstLetter() {
self = self.capitalizingFirstLetter()
}
}
答案 1 :(得分:115)
Swift 5或更高版本
extension StringProtocol {
var firstUppercased: String {
return prefix(1).uppercased() + dropFirst()
}
var firstCapitalized: String {
return prefix(1).capitalized + dropFirst()
}
}
Xcode 9•Swift 4
extension StringProtocol {
var firstUppercased: String {
return prefix(1).uppercased() + dropFirst()
}
var firstCapitalized: String {
return String(prefix(1)).capitalized + dropFirst()
}
}
"Swift".first // "S"
"Swift".last // "t"
"hello world!!!".firstUppercased // "Hello world!!!"
"DŽ".firstCapitalized // "Dž"
"Dž".firstCapitalized // "Dž"
"dž".firstCapitalized // "Dž"
答案 2 :(得分:74)
Swift 3.0
表示“Hello World”
nameOfString.capitalized
或“HELLO WORLD”
nameOfString.uppercased
答案 3 :(得分:31)
Swift 4.0
string.capitalized(with: nil)
或
string.capitalized
然而,这会将每个单词的首字母大写
Apple的文档:
大写字符串是一个字符串,每个单词中的第一个字符更改为相应的大写值,所有剩余字符设置为相应的小写值。 “单词”是由空格,制表符或行终止符分隔的任何字符序列。不考虑一些常用的分隔标点符号,因此该属性通常不会产生多字符串的期望结果。有关其他信息,请参阅getLineStart(_:end:contentsEnd:for :)方法。
答案 4 :(得分:19)
extension String {
func firstCharacterUpperCase() -> String {
let lowercaseString = self.lowercaseString
return lowercaseString.stringByReplacingCharactersInRange(lowercaseString.startIndex...lowercaseString.startIndex, withString: String(lowercaseString[lowercaseString.startIndex]).uppercaseString)
}
}
let x = "heLLo"
let m = x.firstCharacterUpperCase()
对于Swift 5:
extension String {
func firstCharacterUpperCase() -> String {
let lowerCasedString = self.lowercased()
return lowerCasedString.replacingCharacters(in: lowerCasedString.startIndex...lowerCasedString.startIndex, with: String(lowerCasedString[lowerCasedString.startIndex]).uppercased())
}
}
答案 5 :(得分:9)
对于单词中使用的第一个字符.capitalized
使用swift和全字使用.uppercased()
答案 6 :(得分:9)
Swift 2.0(单行):
String(nameOfString.characters.prefix(1)).uppercaseString + String(nameOfString.characters.dropFirst())
答案 7 :(得分:3)
我得到的第一个字符与Kirsteins'解。这将使第一个角色大写,而不会看到双倍:
var s: String = "hello world"
s = prefix(s, 1).capitalizedString + suffix(s, countElements(s) - 1)
我不知道它的效率或多或少,我只知道它给了我想要的结果。
答案 8 :(得分:3)
在Swift 3中,您可以轻松使用
textField.autocapitalizationType = UITextAutocapitalizationType.sentences
答案 9 :(得分:3)
这是 Swift 5 的一个版本,如果第一个字母已经是大写字母或没有大小写概念,则使用Unicode scalar properties API进行纾困:
extension String {
func firstLetterUppercased() -> String {
guard let first = first, first.isLowercase else { return self }
return String(first).uppercased() + dropFirst()
}
}
答案 10 :(得分:3)
Swift 3(xcode 8.3.3)
大写字母
的所有第一个字符let str = "your string"
let capStr = str.capitalized
//Your String
大写所有字符
let str = "your string"
let upStr = str.uppercased()
//YOUR STRING
大写仅字符串的第一个字符
var str = "your string"
let capStr = String(str.characters.prefix(1)).uppercased() + String(str.characters.dropFirst())
//Your string
答案 11 :(得分:2)
将字符串中的第一个字符大写
scrollView.AddSubview(canvasDrawLine );
答案 12 :(得分:1)
雨燕4
func firstCharacterUpperCase() -> String {
if self.count == 0 { return self }
return prefix(1).uppercased() + dropFirst().lowercased()
}
答案 13 :(得分:1)
在Swift 3.0中(这比接受的答案更快更安全):
extension String {
func firstCharacterUpperCase() -> String {
if let firstCharacter = characters.first {
return replacingCharacters(in: startIndex..<index(after: startIndex), with: String(firstCharacter).uppercased())
}
return ""
}
}
nameOfString.capitalized无效,它会将句子中的每个单词都大写
答案 14 :(得分:1)
对于Swift 5,您可以简单地做到这一点:
for k,v in json.loads(json.dumps(USERS)).items():
print k, v
示例:“ abc”->“ Abc”
答案 15 :(得分:1)
结合上面的答案,我写了一个小扩展,将每个单词的第一个字母大写(因为这就是我所寻找的并且认为其他人可以使用它)。
我谦卑地提交:
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
}
}
答案 16 :(得分:1)
我的解决方案:
func firstCharacterUppercaseString(string: String) -> String {
var str = string as NSString
let firstUppercaseCharacter = str.substringToIndex(1).uppercaseString
let firstUppercaseCharacterString = str.stringByReplacingCharactersInRange(NSMakeRange(0, 1), withString: firstUppercaseCharacter)
return firstUppercaseCharacterString
}
答案 17 :(得分:1)
Leonardo Savio Dabus的信用:
我想大多数用例都是为了获得正确的套管:
import Foundation
extension String {
var toProper:String {
var result = lowercaseString
result.replaceRange(startIndex...startIndex, with: String(self[startIndex]).capitalizedString)
return result
}
}
答案 18 :(得分:0)
迅速5
https://www.hackingwithswift.com/example-code/strings/how-to-capitalize-the-first-letter-of-a-string
extension String {
func capitalizingFirstLetter() -> String {
return prefix(1).capitalized + dropFirst()
}
mutating func capitalizeFirstLetter() {
self = self.capitalizingFirstLetter()
}
}
与您的字符串一起使用
let test = "the rain in Spain"
print(test.capitalizingFirstLetter())
答案 19 :(得分:0)
以防万一有人对 SwiftUI 提出同样的问题:
// Mystring is here
Text("mystring is here")
.autocapitalization(.sentences)
// Mystring Is Here
Text("mystring is here")
.autocapitalization(.words)
答案 20 :(得分:0)
我假设您希望将整个单词串的第一个单词大写。例如:“我的猫很胖,我的脂肪很松弛”应该返回“我的猫很胖,我的脂肪很松弛”。
斯威夫特 5:
为此,您可以 import Foundation
然后使用 capitalized
属性。示例:
import Foundation
var x = "my cat is fat, and my fat is flabby"
print(x.capitalized) //prints "My Cat Is Fat, And My Fat Is Flabby"
如果你想成为一个纯粹主义者而不是 import Foundation
,那么你可以创建一个字符串扩展。
extension String {
func capitalize() -> String {
let arr = self.split(separator: " ").map{String($0)}
var result = [String]()
for element in arr {
result.append(String(element.uppercased().first ?? " ") + element.suffix(element.count-1))
}
return result.joined(separator: " ")
}
}
然后你可以使用它,就像这样:
var x = "my cat is fat, and my fat is flabby"
print(x.capitalize()) //prints "My Cat Is Fat, And My Fat Is Flabby"
答案 21 :(得分:0)
如果您的字符串全部大写,则下面的方法将起作用
Parallel.Invoke(action)
此扩展程序将为您提供帮助
labelTitle.text = remarks?.lowercased().firstUppercased
答案 22 :(得分:0)
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: " ")
}
}
答案 23 :(得分:0)
Swift 3更新
replaceRange
func现在是replaceSubrange
nameOfString.replaceSubrange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalized)
答案 24 :(得分:0)
func helperCapitalizeFirstLetter(stringToBeCapd:String)->String{
let capString = stringToBeCapd.substringFromIndex(stringToBeCapd.startIndex).capitalizedString
return capString
}
也可以通过你的字符串并获得大写字母。
答案 25 :(得分:0)
这是我按小步骤做的方式,类似于@Kirsteins。
func capitalizedPhrase(phrase:String) -> String {
let firstCharIndex = advance(phrase.startIndex, 1)
let firstChar = phrase.substringToIndex(firstCharIndex).uppercaseString
let firstCharRange = phrase.startIndex..<firstCharIndex
return phrase.stringByReplacingCharactersInRange(firstCharRange, withString: firstChar)
}
答案 26 :(得分:-1)
如果您想将字符串中的每个单词大写,可以使用此扩展程序
Swift 4 Xcode 9.2
extension String {
var wordUppercased: String {
var aryOfWord = self.split(separator: " ")
aryOfWord = aryOfWord.map({String($0.first!).uppercased() + $0.dropFirst()})
return aryOfWord.joined(separator: " ")
}
}
<强>二手强>
print("simple text example".wordUppercased) //output:: "Simple Text Example"
答案 27 :(得分:-1)
extension String {
var lowercased:String {
var result = Array<Character>(self.characters);
if let first = result.first { result[0] = Character(String(first).uppercaseString) }
return String(result)
}
}
答案 28 :(得分:-1)
在viewDidLoad()方法中添加此行。
txtFieldName.autocapitalizationType = UITextAutocapitalizationType.words