J'ai les valeurs suivantes:
int a=1;
int b=0;
int c=2;
int d=2;
int e=1;
Comment puis-je concaténer ces valeurs pour que je me retrouve avec une chaîne qui est 10221
; veuillez noter que la multiplication de a
par 10000, b
par 1000 ..... et e
par 1 ne fonctionnera pas puisque b=0
et donc je le perdrai lorsque j'additionnerai les valeurs.
Le moyen le plus simple (mais un peu sale):
String result = "" + a + b + c + d + e
Edit: Je ne recommande pas cela et suis d'accord avec le commentaire de Jon. L'ajout de ces chaînes vides supplémentaires est probablement le meilleur compromis entre la brièveté et la clarté.
La solution de Michael Borgwardt est la meilleure pour 5 chiffres, mais si vous avez un nombre variable de chiffres, vous pouvez utiliser quelque chose comme ceci:
public static String concatenateDigits(int... digits) {
StringBuilder sb = new StringBuilder(digits.length);
for (int digit : digits) {
sb.append(digit);
}
return sb.toString();
}
Cela a fonctionné pour moi.
int i = 14;
int j = 26;
int k = Integer.valueOf(String.valueOf(i) + String.valueOf(j));
System.out.println(k);
Il s'est avéré que 1426
juste pour ne pas oublier la méthode format
String s = String.format("%s%s%s%s%s", a, b, c, d, e);
(%1.1s%1.1s%1.1s%1.1s%1.1s
si vous ne voulez que le premier chiffre de chaque numéro ...)
Réellement,
int result = a * 10000 + b * 1000 + c * 100 + d * 10 + e;
String s = Integer.toString(result);
va fonctionner.
Remarque: cela ne fonctionnera que lorsque a
est supérieur à 0 et que tous b
, c
, d
et e
sont en [ 0, 9]. Par exemple, si b
vaut 15, la méthode de Michael vous donnera le résultat que vous voulez probablement.
Si vous multipliez b
par 1000, vous ne perdrez aucune des valeurs. Voir ci-dessous pour les mathématiques.
10000
0
200
20
1
=====
10221
StringBuffer sb = new StringBuffer();
sb.append(a).append(b).append(c)...
Garder les valeurs en tant qu'int est préférable, comme les autres réponses vous le montrent.
D'autres ont souligné que la multiplication de b
par 1000 ne devrait pas poser de problème - mais si a était égal à zéro, vous finiriez par le perdre. (Vous obtiendrez une chaîne de 4 chiffres au lieu de 5.)
Voici une approche alternative (à usage général) - qui suppose que toutes les valeurs sont comprises entre 0 et 9. (Vous devriez très probablement mettre du code pour lever une exception si cela ne s'avère pas vrai, mais je l'ai laissé ici pour plus de simplicité.)
public static String concatenateDigits(int... digits)
{
char[] chars = new char[digits.length];
for (int i = 0; i < digits.length; i++)
{
chars[i] = (char)(digits[i] + '0');
}
return new String(chars);
}
Dans ce cas, vous l'appelleriez avec:
String result = concatenateDigits(a, b, c, d, e);
En utilisant Java 8 et plus, vous pouvez utiliser StringJoiner , une manière très propre et plus flexible (surtout si vous avez une liste en entrée au lieu d'un ensemble connu de variables) ae):
int a = 1;
int b = 0;
int c = 2;
int d = 2;
int e = 1;
List<Integer> values = Arrays.asList(a, b, c, d, e);
String result = values.stream().map(i -> i.toString()).collect(Collectors.joining());
System.out.println(result);
Si vous avez besoin d'un séparateur, utilisez:
String result = values.stream().map(i -> i.toString()).collect(Collectors.joining(","));
Pour obtenir le résultat suivant:
1,0,2,2,1
Edit : comme l'a commenté LuCio, le code suivant est plus court:
Stream.of(a, b, c, d, e).map(Object::toString).collect(Collectors.joining());
Pour le plaisir ... comment [~ # ~] pas [~ # ~] pour le faire ; -)
String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", "");
Ce n'est pas que quelqu'un penserait vraiment à le faire de cette façon dans ce cas - mais cela illustre pourquoi il est important de donner accès à certains membres de l'objet, sinon les utilisateurs de l'API finissent par analyser la représentation sous forme de chaîne de votre objet, et alors vous êtes bloqué de ne pas être capable de le modifier, ou risquer de casser leur code si vous le faites.
Vous pouvez utiliser
String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
Je suggère de les convertir en chaînes.
StringBuilder concatenated = new StringBuilder();
concatenated.append(a);
concatenated.append(b);
/// etc...
concatenated.append(e);
Puis reconvertir en entier:
Integer.valueOf(concatenated.toString());
Utilisez StringBuilder
StringBuilder sb = new StringBuilder(String.valueOf(a));
sb.append(String.valueOf(b));
sb.append(String.valueOf(c));
sb.append(String.valueOf(d));
sb.append(String.valueOf(e));
System.out.print(sb.toString());
Que diriez-vous de ne pas utiliser de chaînes du tout ...
Cela devrait fonctionner pour n'importe quel nombre de chiffres ...
int[] nums = {1, 0, 2, 2, 1};
int retval = 0;
for (int digit : nums)
{
retval *= 10;
retval += digit;
}
System.out.println("Return value is: " + retval);
En supposant que vous commenciez avec des variables:
int i=12;
int j=12;
Cela donnera la sortie 1212
:
System.out.print(i+""+j);
Et cela donnera la sortie 24
:
System.out.print(i+j);
Les gens s'inquiétaient de ce qui se passait quand un == 0. Solution facile pour cela ... avoir un chiffre devant. :)
int sum = 100000 + a*10000 + b*1000 + c*100 + d*10 + e;
System.out.println(String.valueOf(sum).substring(1));
Le plus gros inconvénient: il crée deux cordes. Si c'est un gros problème, String.format pourrait vous aider.
int sum = a*10000 + b*1000 + c*100 + d*10 + e;
System.out.println(String.format("%05d", sum));
Les meilleures solutions sont déjà discutées. Pour le diable, vous pouvez également le faire: étant donné que vous avez toujours affaire à 5 chiffres,
(new Java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).toString()
Je ne prétends pas que c'est la meilleure façon; il suffit d'ajouter une autre façon de voir des situations similaires. :)