私はオートコレクトシステムを作ろうとしています、そしてユーザーが大文字でWordをタイプするとき、オートコレクトは機能しません。これを修正するために、入力した文字列のコピーを作成し、.lowercaseStringを適用してからそれらを比較しました。文字列が実際にタイプミスされている場合は、Wordを修正する必要があります。ただし、入力されたWordを置き換えるWordがすべて小文字です。だから私は.uppercaseStringを最初の文字だけに適用する必要があります。私はもともと私が使用できると思った
nameOfString[0]
しかしこれはどうやらうまくいかない。文字列の最初の文字を大文字にしてから、最初の文字を大文字にして文字列全体を印刷する方法を教えてください。
助けてくれてありがとう!
APIガイドラインに準拠した、変更バージョンと非変更バージョンを含みます。
Swift 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()
}
}
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ž"
スイフト3.0
ハローワールド
nameOfString.capitalized
または「HELLO WORLD」の場合
nameOfString.uppercased
Swift 4.0
string.capitalized(with: nil)
または
string.capitalized
しかしこれはすべてのWordの最初の文字を大文字にします
アップルのドキュメント:
大文字の文字列は、各Wordの最初の文字が対応する大文字の値に変更され、残りのすべての文字が対応する小文字の値に設定された文字列です。 「単語」とは、スペース、タブ、または行末記号で区切られた一連の文字のことです。一般的な単語区切りの句読点は考慮されていないため、このプロパティでは一般にマルチワード文字列に対して望ましい結果が得られない可能性があります。追加情報については、getLineStart(_:end:contentsEnd:for :)メソッドを参照してください。
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())
}
}
Wordの最初の文字にはSwiftの.capitalized
を使用し、Word全体には.uppercased()
を使用します。
Swift 2.0(単一行):
String(nameOfString.characters.prefix(1)).uppercaseString + String(nameOfString.characters.dropFirst())
Swift 3からはtextField.autocapitalizationType = UITextAutocapitalizationType.sentences
を簡単に使うことができます
これはSwift 5のバージョンで、 UnicodeスカラープロパティAPI を使用します。最初の文字がすでに大文字であるか、大文字と小文字の区別がない場合は、回避してください。
extension String {
func firstLetterUppercased() -> String {
guard let first = first, first.isLowercase else { return self }
return String(first).uppercased() + dropFirst()
}
}
スイフト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
最初のキャラクターがKirsteinsのソリューションと重複しています。これは、二重に見えることなく、最初の文字を大文字にします。
var s: String = "hello world"
s = prefix(s, 1).capitalizedString + suffix(s, countElements(s) - 1)
私はそれが多かれ少なかれ効率的であるかどうかわからない、私はちょうどそれが私に望ましい結果を与えることを知っている。
文字列の最初の文字を大文字にする
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
}
}
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は機能しません。文中のすべての単語を大文字にします。
私の解決策:
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
}
スイフト4
func firstCharacterUpperCase() -> String {
if self.count == 0 { return self }
return prefix(1).uppercased() + dropFirst().lowercased()
}
上記の答えを取り入れて、私はすべてのWordの最初の文字を大文字にした小さな拡張子を書きました(それが私が探していたもので、他の誰かがそれを使うことができると考えたからです)。
私は謙虚に提出します:
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
}
}
私はこのバージョンの一部であり、それは別の答えからのクリーンアップされたバージョンです。
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を一度だけ評価することによってより効率的になることを目指しています、そしてそれから部分文字列を作成するために一貫したフォームを使います。
あなたの文字列がすべて大文字なら、以下の方法はうまくいきます。
labelTitle.text = remarks?.lowercased().firstUppercased
この拡張はあなたを助けるでしょう
extension StringProtocol {
var firstUppercased: String {
guard let first = first else { return "" }
return String(first).uppercased() + dropFirst()
}
}
文字列の各単語を大文字にしたい場合は、この拡張子を使用できます
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"
Swift 3 Update
replaceRange
関数はreplaceSubrange
になりました
nameOfString.replaceSubrange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalized)
Swift 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())
func helperCapitalizeFirstLetter(stringToBeCapd:String)->String{
let capString = stringToBeCapd.substringFromIndex(stringToBeCapd.startIndex).capitalizedString
return capString
}
文字列を渡して大文字の文字列を返すこともできます。
スイフト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: " ")
}
}
これは、@ 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)
}