Swift仅将.uppercaseString应用于字符串的第一个字母

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift仅将.uppercaseString应用于字符串的第一个字母相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个自动更正系统,当用户键入带有大写字母的单词时,自动更正不起作用。为了解决这个问题,我制作了一个字符串类型的副本,应用了.lowercaseString,然后对它们进行了比较。如果字符串确实是错误的,它应该纠正这个词。然而,替换键入的单词的单词都是小写的。所以我需要将.uppercaseString仅应用于第一个字母。我原本以为我可以用

nameOfString[0]

但这显然不起作用。如何将字符串的第一个字母设置为大写,然后能够打印第一个字母大写的完整字符串?

谢谢你的帮助!

答案

包括与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()
    

斯威夫特4:

extension String 
    func capitalizingFirstLetter() -> String 
      return prefix(1).uppercased() + self.lowercased().dropFirst()
    

    mutating func capitalizeFirstLetter() 
      self = self.capitalizingFirstLetter()
    

另一答案

从Swift 3,您可以轻松使用textField.autocapitalizationType = UITextAutocapitalizationType.sentences

另一答案

这是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()
  

另一答案

大写字符串中的第一个字符

extension String 
    var capitalizeFirst: String 
        if self.characters.count == 0 
            return self

        return String(self[self.startIndex]).capitalized + String(self.characters.dropFirst())
    

另一答案

Leonardo Savio Dabus的积分:

我想大多数用例都是为了获得正确的套管:

import Foundation

extension String 

    var toProper:String 
        var result = lowercaseString
        result.replaceRange(startIndex...startIndex, with: String(self[startIndex]).capitalizedString)
        return result
    

另一答案

我的解决方案

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

另一答案

结合上面的答案,我写了一个小扩展,大写每个单词的第一个字母(因为这是我正在寻找的,并认为其他人可以使用它)。

我谦卑地提交:

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
    

另一答案

在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将不起作用,它将大写句子中的每个单词

另一答案

斯威夫特4

func firstCharacterUpperCase() -> String 
        if self.count == 0  return self 
        return prefix(1).uppercased() + dropFirst().lowercased()
    
另一答案

在快速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())
另一答案

这是我用小步骤做的方式,类似于@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)

另一答案

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ž"
另一答案
func helperCapitalizeFirstLetter(stringToBeCapd:String)->String
    let capString = stringToBeCapd.substringFromIndex(stringToBeCapd.startIndex).capitalizedString
    return capString

也可以只传递你的字符串并获得大写字母。

另一答案

Swift 3更新

replaceRange func现在是replaceSubrange

nameOfString.replaceSubrange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalized)
另一答案

我偏爱这个版本,这是另一个答案的清理版本:

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一次,然后使用一致的表单来创建子字符串,它努力提高效率。

另一答案

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

另一答案

如果你想大写字符串的每个单词,你可以使用这个扩展名

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"
另一答案

如果你的字符串是全部大写,则下面的方法将起作用

labelTitle.text = remarks?.lowercased().firstUppercased

此扩展程序将帮助您

extension StringProtocol 
    var firstUppercased: String 
   

以上是关于Swift仅将.uppercaseString应用于字符串的第一个字母的主要内容,如果未能解决你的问题,请参考以下文章

在 Ruby 中按值传递是啥意思? [复制]

Swift如何检查API是不是不可用[重复]

仅将 IBAction 应用于单个单元格

使 ESLint 仅将规则应用于某些文件名模式

NSFetchedResultsController 仅将 NSSortDescriptor 应用于满足特定条件的条目?

仅将 UIImageView 应用于 UITableView 中的特定部分