Comment avez-vous laissé un pavé int
avec des zéros lors de la conversion en String
en java?
Je cherche essentiellement à compléter des entiers allant jusqu'à 9999
avec des zéros non significatifs (par exemple, 1 = 0001
).
Utilisez Java.lang.String.format(String,Object...)
comme ceci:
_String.format("%05d", yournumber);
_
pour un remplissage à zéro d'une longueur de 5. Pour une sortie hexadécimale, remplacez d
par un x
comme dans _"%05x"
_.
Les options de formatage complètes sont documentées dans le cadre de Java.util.Formatter
.
Si, pour une raison quelconque, vous utilisez une version antérieure à 1.5 Java, vous pouvez utiliser la méthode Apache Commons Lang.
org.Apache.commons.lang.StringUtils.leftPad(String str, int size, '0')
Supposons que vous souhaitiez imprimer 11
comme 011
Vous pouvez utiliser un formateur : "%03d"
.
Vous pouvez utiliser ce formateur comme ceci:
int a = 11;
String with3digits = String.format("%03d", a);
System.out.println(with3digits);
Certaines méthodes Java prennent également en charge directement ces formateurs:
System.out.printf("%03d", a);
Trouvé cet exemple ... va tester ...
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));
}
}
Testé cela et:
String.format("%05d",number);
Les deux fonctionnent, je pense que String.Format est meilleur et plus succinct.
Si les performances sont importantes dans votre cas, vous pouvez le faire vous-même avec moins de temps système par rapport à la fonction String.format
:
/**
* @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");
}
Résultat
fonction propre: 1697ms
String.format: 38134ms
Vous pouvez utiliser Google Guava :
Maven:
<dependency>
<artifactId>guava</artifactId>
<groupId>com.google.guava</groupId>
<version>14.0.1</version>
</dependency>
Exemple de code:
String paddedString1 = Strings.padStart("7", 3, '0'); //"007"
String paddedString2 = Strings.padStart("2020", 3, '0'); //"2020"
Remarque:
Guava
est une bibliothèque très utile, elle fournit également de nombreuses fonctionnalités relatives à Collections
, Caches
, Functional idioms
, Concurrency
, Strings
, Primitives
, Ranges
, IO
, Hashing
, EventBus
, etc.
Réf: GuavaExplained
Essaye celui-là:
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
Bien que beaucoup des approches ci-dessus soient bonnes, nous avons parfois besoin de formater des entiers et des flottants. Nous pouvons l’utiliser, en particulier lorsque nous avons besoin d’indiquer un nombre particulier de zéros à gauche et à droite de nombres décimaux.
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);
si vous souhaitez imprimer le texte formaté directement sur l'écran.
tilisez la classe DecimalFormat, comme suit:
NumberFormat formatter = new DecimalFormat("0000"); //i use 4 Zero but you can also another number
System.out.println("OUTPUT : "+formatter.format(811));
OUTPUT: 0000811
Vous devez utiliser un formateur, le code suivant utilise NumberFormat
int inputNo = 1;
NumberFormat nf = NumberFormat.getInstance();
nf.setMaximumIntegerDigits(4);
nf.setMinimumIntegerDigits(4);
nf.setGroupingUsed(false);
System.out.println("Formatted Integer : " + nf.format(inputNo));
Sortie: 0001
Vérifiez mon code qui fonctionnera pour integer et String.
Supposons que notre premier nombre est 2. Et nous voulons ajouter des zéros à celui-ci afin que la longueur de la chaîne finale soit 4. Pour cela, vous pouvez utiliser le code suivant
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);