web-dev-qa-db-fra.com

Comment concaténer des valeurs int en Java?

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.

30
Shamli

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é.

40
Michael Borgwardt

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();
}
30
polygenelubricants

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

26
Zeeshan

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 ...)

12
Carlos Heuberger

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.

11
T .

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
5
Daniel A. White
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.

5
Björn

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);
4
Jon Skeet

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());
3
flavio.donze

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.

3
JRL

Vous pouvez utiliser

String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
1
Ali

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());
1
Grundlefleck

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());
1
Shervin Asgari

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);
1
Rodney Barbati

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);
1
ajay

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));
1
cHao

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. :)

0
ring bearer