Si les performances sont importantes dans votre cas, vous pouvez le faire vous-même en réduisant les frais généraux par rapport au système de gestion de la qualité. String.format
fonction :
/**
* @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
2 votes
Ouaip, c'est ça ! C'est ma faute... Je l'ai tapé sur mon téléphone. Vous n'avez pas besoin de la "nouvelle chaîne" non plus : Integer.toString(num+10000).subString(1) fonctionne.
0 votes
Long.valueOf("00003400").toString(); Integer.valueOf("00003400").toString(); --->3400
1 votes
Voir aussi stackoverflow.com/questions/35521278/ pour une solution avec diagramme
0 votes
Il y a un problème avec le
new String(Integer.toString(num + 10000)).substring(1)
approche sinum
n'est pas plus grand que 9999, ijs.