web-dev-qa-db-ja.com

.uppercaseStringを文字列の最初の文字だけに適用する

私はオートコレクトシステムを作ろうとしています、そしてユーザーが大文字でWordをタイプするとき、オートコレクトは機能しません。これを修正するために、入力した文字列のコピーを作成し、.lowercaseStringを適用してからそれらを比較しました。文字列が実際にタイプミスされている場合は、Wordを修正する必要があります。ただし、入力されたWordを置き換えるWordがすべて小文字です。だから私は.uppercaseStringを最初の文字だけに適用する必要があります。私はもともと私が使用できると思った

nameOfString[0]

しかしこれはどうやらうまくいかない。文字列の最初の文字を大文字にしてから、最初の文字を大文字にして文字列全体を印刷する方法を教えてください。

助けてくれてありがとう!

213
SomeGuy

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()
    }
}
465
Kirsteins

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ž"
119
Leo Dabus

スイフト3.0

ハローワールド

nameOfString.capitalized

または「HELLO WORLD」の場合

nameOfString.uppercased
74
Maselko

Swift 4.0

string.capitalized(with: nil)

または

string.capitalized

しかしこれはすべてのWordの最初の文字を大文字にします

アップルのドキュメント:

大文字の文字列は、各Wordの最初の文字が対応する大文字の値に変更され、残りのすべての文字が対応する小文字の値に設定された文字列です。 「単語」とは、スペース、タブ、または行末記号で区切られた一連の文字のことです。一般的な単語区切りの句読点は考慮されていないため、このプロパティでは一般にマルチワード文字列に対して望ましい結果が得られない可能性があります。追加情報については、getLineStart(_:end:contentsEnd:for :)メソッドを参照してください。

32
sam k
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())
    }
}
19
user2260304

Wordの最初の文字にはSwiftの.capitalizedを使用し、Word全体には.uppercased()を使用します。

9

Swift 2.0(単一行):

String(nameOfString.characters.prefix(1)).uppercaseString + String(nameOfString.characters.dropFirst())
9
Phil

Swift 3からはtextField.autocapitalizationType = UITextAutocapitalizationType.sentencesを簡単に使うことができます

3
Yura

これはSwift 5のバージョンで、 UnicodeスカラープロパティAPI を使用します。最初の文字がすでに大文字であるか、大文字と小文字の区別がない場合は、回避してください。

extension String {
  func firstLetterUppercased() -> String {
    guard let first = first, first.isLowercase else { return self }
    return String(first).uppercased() + dropFirst()
  }
}
3
Adam Sharp

スイフト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
3
oscar castellon

最初のキャラクターがKirsteinsのソリューションと重複しています。これは、二重に見えることなく、最初の文字を大文字にします。

var s: String = "hello world"
s = prefix(s, 1).capitalizedString + suffix(s, countElements(s) - 1)

私はそれが多かれ少なかれ効率的であるかどうかわからない、私はちょうどそれが私に望ましい結果を与えることを知っている。

3
Marc Fearby

文字列の最初の文字を大文字にする

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

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

Leonardo Savio Dabusへのクレジット:

私はほとんどのユースケースが適切なケーシングを得ることであると思います:

import Foundation

extension String {

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

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は機能しません。文中のすべての単語を大文字にします。

1
pierre23

私の解決策:

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
}
1
Nazariy Vlizlo

スイフト4

func firstCharacterUpperCase() -> String {
        if self.count == 0 { return self }
        return prefix(1).uppercased() + dropFirst().lowercased()
    }
1
Gayratjon

上記の答えを取り入れて、私はすべての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
    }
}
1
Matt

私はこのバージョンの一部であり、それは別の答えからのクリーンアップされたバージョンです。

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を一度だけ評価することによってより効率的になることを目指しています、そしてそれから部分文字列を作成するために一貫したフォームを使います。

0
Patrick Beard

あなたの文字列がすべて大文字なら、以下の方法はうまくいきます。

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

この拡張はあなたを助けるでしょう

extension StringProtocol {
    var firstUppercased: String {
        guard let first = first else { return "" }
        return String(first).uppercased() + dropFirst()
    }
}
0
Ashu

文字列の各単語を大文字にしたい場合は、この拡張子を使用できます

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"
0
Shilpriya

Swift 3 Update

replaceRange関数はreplaceSubrangeになりました

nameOfString.replaceSubrange(nameOfString.startIndex...nameOfString.startIndex, with: String(nameOfString[nameOfString.startIndex]).capitalized)
0
Brendt Bly

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())
0
Sanjay Mishra
func helperCapitalizeFirstLetter(stringToBeCapd:String)->String{
    let capString = stringToBeCapd.substringFromIndex(stringToBeCapd.startIndex).capitalizedString
    return capString
}

文字列を渡して大文字の文字列を返すこともできます。

0
Daniel Leonard

スイフト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: " ")
    }
}
0
Daniel R

これは、@ 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)
}
0
guptron