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应用于字符串的第一个字母的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController 仅将 NSSortDescriptor 应用于满足特定条件的条目?