414 Stimmen

Führende Nullen für Int in Swift

Ich möchte in Swift einen Int in eine String mit führenden Nullen umwandeln. Betrachten Sie beispielsweise diesen Code:

for myInt in 1 ... 3 {
    print("\(myInt)")
}

Derzeit ist das Ergebnis davon:

1
2
3

Aber ich möchte, dass es so aussieht:

01
02
03

Gibt es eine saubere Möglichkeit, dies innerhalb der Swift-Standardbibliotheken zu tun?

7voto

Luca Davanzo Punkte 19769

Swift 5

@imanuo antworten ist bereits großartig, aber wenn Sie mit einer Anwendung voller Zahlen arbeiten, können Sie eine Erweiterung wie diese in Betracht ziehen:

extension String {

    init(withInt int: Int, leadingZeros: Int = 2) {
        self.init(format: "%0\(leadingZeros)d", int)
    }

    func leadingZeros(_ zeros: Int) -> String {
        if let int = Int(self) {
            return String(withInt: int, leadingZeros: zeros)
        }
        print("Warnung: \(self) ist kein Int")
        return ""
    }

}

Auf diese Weise können Sie überall aufrufen:

String(withInt: 3) 
// gibt 03 aus

String(withInt: 23, leadingZeros: 4) 
// gibt 0023 aus

"42".leadingZeros(2)
// gibt 42 aus

"54".leadingZeros(3)
// gibt 054 aus

4voto

possen Punkte 7638

Die anderen Antworten sind gut, wenn Sie nur mit Zahlen arbeiten und das Formatierungszeichen verwenden, aber dies ist nützlich, wenn Sie Zeichenfolgen haben, die aufgefüllt werden müssen (obwohl es zugegebenermaßen etwas anders als die gestellte Frage ist, scheint es ähnlich im Geist zu sein). Seien Sie auch vorsichtig, wenn die Zeichenfolge länger als das Pad ist.

   let str = "a str"
   let padAmount = max(10, str.count)
   String(repeatElement("-", count: padAmount - str.count)) + str

Ausgabe "-----a str"

3voto

Steffen Punkte 161

In Xcode 8.3.2, iOS 10.3 Das ist gut zu wissen

Beispiel1:

let dayMoveRaw = 5 
let dayMove = String(format: "%02d", arguments: [dayMoveRaw])
print(dayMove) // 05

Beispiel2:

let dayMoveRaw = 55 
let dayMove = String(format: "%02d", arguments: [dayMoveRaw])
print(dayMove) // 55

3voto

n a Punkte 31

Der unten stehende Code generiert einen 3-stelligen String mit 0-Padding vorne:

import Foundation

var randomInt = Int.random(in: 0..<1000)
var str = String(randomInt)
var paddingZero = String(repeating: "0", count: 3 - str.count)

print(str, str.count, paddingZero + str)

Ausgabe:

5 1 005
88 2 088
647 3 647

0voto

Anupam Mishra Punkte 3248

Swift 4* und höher können Sie auch Folgendes versuchen:

func leftPadding(valueString: String, toLength: Int, withPad: String = " ") -> String {
        guard toLength > valueString.count else { return valueString }

        let padding = String(repeating: withPad, count: toLength - valueString.count)
        return padding + valueString
    }

Rufen Sie die Funktion auf:

leftPadding(valueString: "12", toLength: 5, withPad: "0")

Ausgabe: "00012"

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X