如何在Swift中将字符串的首字母转换为大写?

280
我正在尝试制作一个自动校正系统,当用户输入的单词有大写字母时,自动校正不起作用。为了解决这个问题,我复制了输入的字符串,应用了 .lowercaseString 方法进行比较。如果字符串确实拼写错误,它就会纠正单词。但是替换输入单词的单词变成了全小写。所以我需要对第一个字母应用 .uppercaseString 方法。我最初以为可以使用...
nameOfString[0]

但是显然这样不起作用。如何将字符串的第一个字母大写,并能够打印首字母大写的完整字符串?

谢谢任何帮助!


1
接受的答案已经过时,请查看这个 - Juan Boero
31个回答

0
如果您想将字符串的每个单词大写,可以使用此扩展。

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: " ")
    }
}

Used

print("simple text example".wordUppercased) //output:: "Simple Text Example"

3
只需使用.capitalized - kakubei

0
func helperCapitalizeFirstLetter(stringToBeCapd:String)->String{
    let capString = stringToBeCapd.substringFromIndex(stringToBeCapd.startIndex).capitalizedString
    return capString
}

只需将您的字符串传递进去,就能返回一个首字母大写的字符串。


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: " ")
    }
}

字符串已经有一个名为 capitalized 的属性,专门用于此目的。 - Leo Dabus

0
结合以上答案,我编写了一个小扩展程序,它可以将每个单词的首字母大写(因为这正是我所需要的,而且我认为其他人也会用到它)。
我谨虚心提交:
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
    }
}

2
Swift字符串有一个叫做capitalizedString的方法。如果你需要将其应用于字符串数组,请查看这个答案https://dev59.com/O4jca4cB1Zd3GeqPsihe#28690655。 - Leo Dabus
这个问题要求使用句子大小写,而这个答案可能不尊重其他语言——最好使用现有的 capitalizedString - Warpling

0

我倾向于这个版本,它是另一个答案的清理版:

extension String {
  var capitalizedFirst: String {
    let characters = self.characters
    if let first = characters.first {
      return String(first).uppercased() + 
             String(characters.dropFirst())
    }
    return self
  }
}

它通过只评估self.characters一次并使用一致的形式创建子字符串来努力提高效率。

0
如果您的字符串全是大写字母,那么下面的方法将可行。
labelTitle.text = remarks?.lowercased().firstUppercased

这个扩展将帮助你

extension StringProtocol {
    var firstUppercased: String {
        guard let first = first else { return "" }
        return String(first).uppercased() + dropFirst()
    }
}

1
请使用.capitalized - kakubei
@kakubei 为什么要给负分。这个方法是用来句子大写的。它会将每个单词的首字母都变成大写。举个例子:字符串 (THIS IS A BOY).capitalized 将会返回 (This Is A Boy)而这个方法会返回 (This is a boy)。两者不同。(请点赞或取消负评) - Ashu
你说得对,@ashu,我道歉。但在你编辑答案之前,我无法点赞,所以只需进行小的空格编辑,我就会点赞。再次抱歉。 - kakubei
不需要使用第一个字符初始化字符串。可以使用以下代码:return first.uppercased() + dropFirst() 或者一行代码 return (first?.uppercased() ?? "") + dropFirst() - Leo Dabus

0

Swift 3 更新

replaceRange 函数现在更名为 replaceSubrange

nameOfString.replaceSubrange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalized)

capitalizedString方法已更名为capitalized。 - Rool Paap

-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)
    }
}

-1

在viewDidLoad()方法中添加这行代码。

 txtFieldName.autocapitalizationType = UITextAutocapitalizationType.words

-1

编辑:此代码不再支持文本编辑,仅适用于输入字段。

万一有人因同样的 SwiftUI 问题而来到此处:

// Mystring is here
TextField("mystring is here")
   .autocapitalization(.sentences)


// Mystring Is Here
Text("mystring is here")
   .autocapitalization(.words)

无法工作,在Xcode 12.5.1上测试过。自动大写是为输入字段设计的,而不是文本元素。 - Iain Delaney
你是对的,我认为在之前的Xcode版本中它可以工作,我通常不会发布未经测试的代码。 - TheLegend27

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接