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

时间:2014-10-10 19:03:40

标签: ios swift string ios8-extension

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

nameOfString[0]

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

感谢您的帮助!

29 个答案:

答案 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