Wie kann ich Pad eine ganze Zahl mit Nullen auf der linken Seite?
-
19-08-2019 - |
Frage
Wie links Sie Pad eine int
mit Nullen, wenn sie einen String
in Java konvertieren?
Ich suche im Grunde zu polstern ganzen Zahlen nach oben mit führenden Nullen 9999
(z 1 = 0001
).
Lösung
Mit java.lang.String.format(String,Object...)
wie folgt aus:
String.format("%05d", yournumber);
für Zero-Padding mit einer Länge von 5 für hexadezimale Ausgabe ersetzt den d
mit einem x
wie in "%05x"
.
Die vollständigen Formatierungsoptionen werden im Rahmen der java.util.Formatter
.
Andere Tipps
Wenn Sie aus irgendeinem Grund verwenden pre 1.5 Java dann versuchen, mit Apache Commons Lang Methode
org.apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
Angenommen, Sie 11
als 011
drucken möchten
Sie könnten einen Formatierer verwenden :. "%03d"
Sie können diese Formatierer wie folgt verwenden:
int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
Alternativ unterstützen einige Java-Methoden direkt auf diese Formatierer:
System.out.printf("%03d", a);
In diesem Beispiel gefunden ... testen ...
import java.text.DecimalFormat;
class TestingAndQualityAssuranceDepartment
{
public static void main(String [] args)
{
int x=1;
DecimalFormat df = new DecimalFormat("00");
System.out.println(df.format(x));
}
}
Getestet diese und:
String.format("%05d",number);
Beide arbeiten, für meine Zwecke denke ich String.Format ist besser und prägnanter.
Wenn die Leistung wichtig, in Ihrem Fall ist man es selbst mit weniger Overhead im Vergleich zu der String.format
Funktion tun konnte:
/**
* @param in The integer value
* @param fill The number of digits to fill
* @return The given value left padded with the given number of digits
*/
public static String lPadZero(int in, int fill){
boolean negative = false;
int value, len = 0;
if(in >= 0){
value = in;
} else {
negative = true;
value = - in;
in = - in;
len ++;
}
if(value == 0){
len = 1;
} else{
for(; value != 0; len ++){
value /= 10;
}
}
StringBuilder sb = new StringBuilder();
if(negative){
sb.append('-');
}
for(int i = fill; i > len; i--){
sb.append('0');
}
sb.append(in);
return sb.toString();
}
Performance
public static void main(String[] args) {
Random rdm;
long start;
// Using own function
rdm = new Random(0);
start = System.nanoTime();
for(int i = 10000000; i != 0; i--){
lPadZero(rdm.nextInt(20000) - 10000, 4);
}
System.out.println("Own function: " + ((System.nanoTime() - start) / 1000000) + "ms");
// Using String.format
rdm = new Random(0);
start = System.nanoTime();
for(int i = 10000000; i != 0; i--){
String.format("%04d", rdm.nextInt(20000) - 10000);
}
System.out.println("String.format: " + ((System.nanoTime() - start) / 1000000) + "ms");
}
Ergebnis
Eigene Funktion: 1697ms
String.format: 38134ms
Sie können mit Google Guava :
Maven:
<dependency>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
<version>14.0.1</version>
</dependency>
Beispielcode:
String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"
Hinweis:
Guava
ist sehr nützlich, Bibliothek, sondern auch viele Funktionen bietet, die Collections
, Caches
, Functional idioms
, Concurrency
, Strings
, Primitives
, Ranges
, IO
, Hashing
, etc
EventBus
bezogen
Ref: GuavaExplained
Versuchen Sie dieses:
import java.text.DecimalFormat;
DecimalFormat df = new DecimalFormat("0000");
String c = df.format(9); // 0009
String a = df.format(99); // 0099
String b = df.format(999); // 0999
Obwohl viele der oben genannten Ansätze sind gut, aber manchmal müssen wir ganze Zahlen als auch als Schwimmer zu formatieren. Wir können dies nutzen, vor allem, wenn wir Pad bestimmte Anzahl von Nullen müssen auf sowie rechts von Dezimalzahlen links.
import java.text.NumberFormat;
public class NumberFormatMain {
public static void main(String[] args) {
int intNumber = 25;
float floatNumber = 25.546f;
NumberFormat format=NumberFormat.getInstance();
format.setMaximumIntegerDigits(6);
format.setMaximumFractionDigits(6);
format.setMinimumFractionDigits(6);
format.setMinimumIntegerDigits(6);
System.out.println("Formatted Integer : "+format.format(intNumber).replace(",",""));
System.out.println("Formatted Float : "+format.format(floatNumber).replace(",",""));
}
}
int x = 1;
System.out.format("%05d",x);
Wenn Sie den formatierten Text direkt auf den Bildschirm drucken.
Verwenden Sie die Klasse DecimalFormat, etwa so:
NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811));
OUTPUT: 0000811
Überprüfen Sie meinen Code, der für integer und String funktioniert.
Nehmen wir unsere erste Zahl ist 2. Und wir wollen, dass Nullen hinzufügen, damit die die Länge der letzte Saite 4 das sein wird für Sie folgenden Code verwenden
int number=2;
int requiredLengthAfterPadding=4;
String resultString=Integer.toString(number);
int inputStringLengh=resultString.length();
int diff=requiredLengthAfterPadding-inputStringLengh;
if(inputStringLengh<requiredLengthAfterPadding)
{
resultString=new String(new char[diff]).replace("\0", "0")+number;
}
System.out.println(resultString);
Sie benötigen einen Formatter zu verwenden, folgenden Code verwendet Number
int inputNo = 1;
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumIntegerDigits(4);
nf.setMinimumIntegerDigits(4);
nf.setGroupingUsed(false);
System.out.println("Formatted Integer : " + nf.format(inputNo));
Ausgabe: 0001
public static String zeroPad(long number, int width) {
long wrapAt = (long)Math.pow(10, width);
return String.valueOf(number % wrapAt + wrapAt).substring(1);
}
Das einzige Problem bei diesem Ansatz ist, dass es Sie, um herauszufinden, setzen auf Ihrem Denken Hut macht, wie es funktioniert.
Keine Pakete benötigt:
String paddedString = i < 100 ? i < 10 ? "00" + i : "0" + i : "" + i;
die Zeichenfolge zu drei Zeichen Dies wird Pad, und es ist einfach ein Teil mehr für vier oder fünf hinzuzufügen. Ich weiß, dass dies in keiner Weise die perfekte Lösung ist (vor allem, wenn Sie eine große gepolsterte Saite verzichten wollen), aber Ich mag es.