【问题标题】:How to capitalize the first character of sentence using Swift如何使用 Swift 将句子的第一个字符大写
【发布时间】:2014-11-22 21:09:06
【问题描述】:

我有一个包含我的句子的字符串描述,并且只想将第一个字母大写。我尝试了不同的东西,但大多数都给了我例外和错误。我正在使用 Xcode 6。

这是我目前尝试过的:

let cap = [description.substringToIndex(advance(0,1))] as String
    description = cap.uppercaseString + description.substringFromIndex(1)

它给了我:

Type 'String.Index' does not conform to protocol 'IntegerLiteralConvertible'

我试过了:

 func capitalizedStringWithLocale(locale:0) -> String

但我还没有弄清楚如何使它工作。

【问题讨论】:

    标签: swift capitalization


    【解决方案1】:

    在 Swift 2 中,你可以这样做

    String(text.characters.first!).capitalizedString + String(text.characters.dropFirst())
    

    【讨论】:

    • 此外,如果您想要一个真正只有首字母大写的字符串,例如“John”或“Doe”而不是“JoHN”和“DOE”,您可以执行以下操作:String(text.characters.first!).capitalizedString + String(text.characters.dropFirst()).lowercased()
    【解决方案2】:

    Swift 3 中的另一种可能性:

    extension String {
        func capitalizeFirst() -> String {
            let firstIndex = self.index(startIndex, offsetBy: 1)
            return self.substring(to: firstIndex).capitalized + self.substring(from: firstIndex).lowercased()
        }
    }
    

    对于 Swift 4:

    来自 Swift 3 代码的警告:

     'substring(to:)' is deprecated: Please use String slicing subscript
     with a 'partial range upto' operator.   
    'substring(from:)' is deprecated: Please use String slicing subscript with a 'partial range from' operator.  
    

    Swift 4 解决方案:

    extension String {
        var capitalizedFirst: String {
            guard !isEmpty else {
                return self
            }
    
            let capitalizedFirstLetter  = charAt(i: 0).uppercased()
            let secondIndex             = index(after: startIndex)
            let remainingString         = self[secondIndex..<endIndex]
    
            let capitalizedString       = "\(capitalizedFirstLetter)\(remainingString)"
            return capitalizedString
        }
    }
    

    【讨论】:

      【解决方案3】:
      import Foundation
      
      // A lowercase string
      let description = "the quick brown fox jumps over the lazy dog."
      
      // The start index is the first letter
      let first = description.startIndex
      
      // The rest of the string goes from the position after the first letter
      // to the end.
      let rest = advance(first,1)..<description.endIndex
      
      // Glue these two ranges together, with the first uppercased, and you'll
      // get the result you want. Note that I'm using description[first...first]
      // to get the first letter because I want a String, not a Character, which
      // is what you'd get with description[first].
      let capitalised = description[first...first].uppercaseString + description[rest]
      
      // Result: "The quick brown fox jumps over the lazy dog."
      

      在开始之前,您可能需要确保句子中至少有一个字符,否则在尝试将索引推进到字符串末尾之外时会出现运行时错误。

      【讨论】:

        【解决方案4】:
        extension String {
            var capitalizedFirstLetter:String {
                  let string = self
                  return string.replacingCharacters(in: startIndex...startIndex, with: String(self[startIndex]).capitalized)
            }
        }
        

        答案:

        let newSentence = sentence.capitalizedFirstLetter
        

        【讨论】:

          【解决方案5】:

          这是在 Swift 4 中的操作方法;以防万一它对任何人有帮助:

          extension String {
              func captalizeFirstCharacter() -> String {
                  var result = self
          
                  let substr1 = String(self[startIndex]).uppercased()
                  result.replaceSubrange(...startIndex, with: substr1)
          
                  return result
              }
          }
          

          它不会改变原来的String

          【讨论】:

            【解决方案6】:

            对于字符串中的一个或每个单词,您可以使用字符串的 .capitalized 属性。

            print("foo".capitalized) //prints: Foo
            
            print("foo foo foo".capitalized) //prints: Foo Foo Foo
            

            【讨论】:

              【解决方案7】:

              斯威夫特 5.0

              答案 1:

              extension String {
                  func capitalizingFirstLetter() -> String {
                      return prefix(1).capitalized + dropFirst()
                   }
              
                  mutating func capitalizeFirstLetter() {
                      self = self.capitalizingFirstLetter()
                  }
               }
              

              答案 2:

               extension String {
                     func capitalizeFirstLetter() -> String {
                          return self.prefix(1).capitalized + dropFirst()
                     }
                }
              

              答案 3:

               extension String {
                     var capitalizeFirstLetter:String {
                          return self.prefix(1).capitalized + dropFirst()
                     }
                }
              

              【讨论】:

              • 你将如何修改它以正确处理字符串“10。实际上是字母的第一个字符应该大写。”
              【解决方案8】:

              Swift 4.2 版本:

              extension String {
              
                  var firstCharCapitalized: String {
                      switch count {
                      case 0:
                          return self
                      case 1:
                          return uppercased()
                      default:
                          return self[startIndex].uppercased() + self[index(after: startIndex)...]
                      }
                  }
              }
              

              【讨论】:

                【解决方案9】:

                Swift 4.0 的最简单解决方案。

                添加为计算属性扩展:

                extension String {
                    var firstCapitalized: String {
                        var components = self.components(separatedBy: " ")
                        guard let first = components.first else {
                            return self
                        }
                        components[0] = first.capitalized
                        return components.joined(separator: " ")
                    }
                }
                

                用法:

                "hello world".firstCapitalized
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-05-30
                  • 1970-01-01
                  • 2014-05-13
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-07-20
                  • 2012-06-23
                  相关资源
                  最近更新 更多