Wie kann ich eine Zahl drucken oder eine Zeichenfolge ohne Auffüllen erstellen, um eine feste Breite zu erzielen?
Zum Beispiel, wenn ich die Nummer habe 12
und sie machen möchte 000012
.
Wie kann ich eine Zahl drucken oder eine Zeichenfolge ohne Auffüllen erstellen, um eine feste Breite zu erzielen?
Zum Beispiel, wenn ich die Nummer habe 12
und sie machen möchte 000012
.
Antworten:
Das fmt-Paket kann dies für Sie tun:
fmt.Printf("|%06d|%6d|\n", 12, 345)
Beachten Sie die 0 in% 06d, die eine Breite von 6 ergibt, und füllen Sie sie mit Nullen auf. Der zweite wird mit Leerzeichen aufgefüllt.
Sie können es hier in Aktion sehen: http://play.golang.org/p/cinDspMccp
Sprintf
anstelle vonPrintf
Verwenden Sie die Printf
Funktion aus dem fmt-Paket mit einem width
von 6
und dem Füllzeichen 0
:
import "fmt"
fmt.Printf("%06d", 12) // Prints to stdout '000012'
Festlegen der width
Werke durch Setzen einer Ganzzahl direkt vor dem Formatbezeichner ('Verb'):
fmt.Printf("%d", 12) // Uses default width, prints '12'
fmt.Printf("%6d", 12) // Uses a width of 6 and left pads with spaces, prints ' 12'
Die einzigen von Golang (und den meisten anderen Sprachen) unterstützten Füllzeichen sind Leerzeichen und 0
:
fmt.Printf("%6d", 12) // Default padding is spaces, prints ' 12'
fmt.Printf("%06d", 12) // Change to 0 padding, prints '000012'
Es ist möglich, den Druck durch Voranstellen eines Minus richtig zu begründen -
:
fmt.Printf("%-6d", 12) // Padding right-justified, prints '12 '
Beachten Sie, dass bei Gleitkommazahlen die Breite die gesamte Formatzeichenfolge enthält:
fmt.Printf("%6.1f", 12.0) // Prints '0012.0' (width is 6, precision is 1 digit)
Es ist nützlich zu beachten, dass die Breite auch programmgesteuert eingestellt werden kann, indem *
anstelle einer Zahl die Breite als int
Parameter übergeben wird:
myWidth := 6
fmt.Printf("%0*d", myWidth, 12) // Prints '000012' as before
Dies kann beispielsweise nützlich sein, wenn der größte Wert, den Sie drucken möchten, nur zur Laufzeit bekannt ist ( maxVal
im folgenden Beispiel aufgerufen ):
myWidth := 1 + int(math.Log10(float64(maxVal)))
fmt.Printf("%*d", myWidth, nextVal)
Wenn Sie nicht drucken möchten, stdout
sondern einen String zurückgeben möchten , verwenden Sie Sprintf
auch das Paket fmt mit denselben Parametern:
s := fmt.Sprintf("%06d", 12) // returns '000012' as a String
Es gibt einen einfachsten Weg, dies zu erreichen. Verwenden
func padNumberWithZero(value uint32) string {
return fmt.Sprintf("%02d", value)
}
fmt.Sprintf
formatiert und gibt eine Zeichenfolge zurück, ohne sie irgendwo zu drucken. Hier %02d
steht links Pad Null für einen Wert mit <2 Ziffern. Wenn der angegebene Wert 2 oder mehr Ziffern hat, wird er nicht aufgefüllt. Beispielsweise:
Sie können %03d
oder mehr für mehr Nullen verwenden.
Die Frage " Liste der Druckformate in Go lang " erinnert uns daran, dass es auch die Flagge gibt:
-
Pad mit Leerzeichen rechts und nicht links (linksbündig das Feld)
Sie können weitere Auffüllbeispiele mit sehen DaddyOh/golang-samples/pad.go
, wenn Sie mit anderen Zeichenfolgenfolgen auffüllen möchten (komplexer als ' 0
' oder ' '):
leftPad(s string, padStr string, pLen int)
rightPad(s string, padStr string, pLen int)
leftPad2Len(s string, padStr string, overallLen int)
rightPad2Len(s string, padStr string, overallLen int)
Siehe play.golang.org:
1234567890
leftPad(str, "*", 3) ***1234567890
leftPad2Len(str, "*-", 13) -*-1234567890
leftPad2Len(str, "*-", 14) *-*-1234567890
leftPad2Len(str, "*", 14) ****1234567890
leftPad2Len(str, "*-x", 14) x*-x1234567890
leftPad2Len(str, "ABCDE", 14) BCDE1234567890
leftPad2Len(str, "ABCDE", 4) 7890
rightPad(str, "*", 3) 1234567890***
rightPad(str, "*!", 3) 1234567890*!*!*!
rightPad2Len(str, "*-", 13) 1234567890*-*
rightPad2Len(str, "*-", 14) 1234567890*-*-
rightPad2Len(str, "*", 14) 1234567890****
rightPad2Len(str, "*-x", 14) 1234567890*-x*
rightPad2Len(str, "ABCDE", 14) 1234567890ABCD
rightPad2Len(str, "ABCDE", 4) 1234
-
ich das Flag benutze, gibt es nur Leerzeichen, ich brauche Nullen.