2010-04-20 18 views
27

tengo los siguientes valores:Cómo concatenar valores int en java?

int a=1; 
int b=0; 
int c=2; 
int d=2; 
int e=1; 

¿Cómo puedo concatenar estos valores para que termino con una cadena que es 10221; tenga en cuenta que multiplicar a por 10000, b por 1000 ..... y e por 1 no funcionará desde b=0 y por lo tanto lo perderé cuando agregue los valores.

+1

Usar Horner-Scheme: ((((a * 10 + b) * 10 + c) * 10 + d) * 10 + e. ¿Por qué pierdes b cuando los sumas? – Searles

+0

Más información sobre Horner-Scheme: http://stackoverflow.com/questions/1991380/what-does-the-operator-do-in-java/ – polygenelubricants

Respuesta

11

En realidad,

int result = a * 10000 + b * 1000 + c * 100 + d * 10 + e; 
String s = Integer.toString(result); 

hará el trabajo.

Nota: esto sólo funciona cuando a es mayor que 0 y todos b, c, d y e se encuentran en [0, 9]. Por ejemplo, si b es 15, el método de Michael le dará el resultado que probablemente desee.

+2

Considere el caso cuando a es 0 ... –

+0

gracias, pero ¿qué pasa si a = 0? Entonces perdería un ¿no? – Shamli

+0

Considere eso, lo agregó a la nota. –

4

Si multiplica b por 1000, no perderá ninguno de los valores. Vea a continuación los cálculos.

10000 
    0 
    200 
    20 
    1 
===== 
10221 
+0

¿Qué pasa si mi primer valor es igual a 0? – Shamli

+1

Aún funcionaría. Le dará el valor correcto. ¿Necesitas que tenga exactamente 5 caracteres de largo? –

4
StringBuffer sb = new StringBuffer(); 
sb.append(a).append(b).append(c)... 

Mantener los valores como un int tú se prefiere, ya que las otras respuestas que muestran.

+4

'StringBuilder' en este caso es una exageración; plain old '+' está bien y es mucho más legible. – polygenelubricants

+1

¿Legible para quién? Prefiero StringBuffer/StringBuilder en este caso, y estoy de acuerdo con Jon Skeets en comentar la respuesta de Michaels. –

1

Sugeriría convertirlos a cadenas.

StringBuilder concatenated = new StringBuilder(); 
concatenated.append(a); 
concatenated.append(b); 
/// etc... 
concatenated.append(e); 

A continuación, convertir de nuevo a un entero:

Integer.valueOf(concatenated.toString()); 
+0

Parece querer una Cadena como resultado final, por lo que el análisis no es necesario (y si eso realmente se quisiera, la solución correcta sería simplemente sumar los números sin ningún tipo de tonterías) –

+0

Buen punto para él queriendo una Cadena, pero si los números se acabaran de agregar, el resultado sería 6, no 10221 ... – Grundlefleck

+0

@polygenelubricants: Totalmente de acuerdo contigo - olvida esta respuesta, la respuesta de Michael o Jon son las mejores soluciones en la información dada :) – Grundlefleck

1

Uso 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()); 
4

otros han señalado que al multiplicar por b 1000 no debe causar ningún problema - pero si un eran cero, terminarías perdiéndolo. (Obtendrá una cadena de 4 dígitos en lugar de 5.)

Aquí hay un enfoque alternativo (de propósito general), que supone que todos los valores están en el rango 0-9. (Usted debe muy posiblemente poner en un cierto código para lanzar una excepción si eso resulta no ser cierto, pero lo he dejado aquí por simplicidad.)

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); 
} 

En este caso, que se dice que con :

String result = concatenateDigits(a, b, c, d, e); 
35

La forma más sencilla (pero un poco sucia):

String result = "" + a + b + c + d + e 

Editar: no recomiendo esto y de acuerdo con el comentario de Jon. Agregar esas cadenas extra vacías es probablemente el mejor compromiso entre brevedad y claridad.solución

+1

¿Sucio? ¿Qué? http://stackoverflow.com/questions/2506474/is-concatenating-with-an-empty-string-to-do-a-string-conversion-really-that-bad – polygenelubricants

+0

@polygenelubricants: bueno, estoy en desacuerdo con la opinión de la mayoría sobre ese punto. –

+12

No soy fan de esto, creo que 'a +" "+ b +" "+ c +" "+ d +" "+ e' sería más claro, a mí mismo, aunque más largo, por supuesto. Es demasiado fácil ver "a + b" y pensar que se agregarán los enteros juntos, IMO. –

29

Michael Borgwardt es la mejor para 5 dígitos, pero si usted tiene un número variable de dígitos, se puede usar algo como esto:

public static String concatenateDigits(int... digits) { 
    StringBuilder sb = new StringBuilder(digits.length); 
    for (int digit : digits) { 
    sb.append(digit); 
    } 
    return sb.toString(); 
} 
+0

Gracias a todos por sus respuestas, siempre estoy trabajando con 5 dígitos, pero en muchos casos comienzan con 0, así que el camino de Michael es el modo wat ;-) – Shamli

+0

Esto también funciona con 0s. Para 5 dígitos, siempre da el mismo resultado que el de Michael; su única ventaja (que no necesita) es que funciona con una cantidad variable de dígitos. – polygenelubricants

+1

+1 Para señalar el uso de Listas de Argumentos de Longitud Variable. –

1

La gente preocuparse sobre lo que ocurre cuando un == 0. Fácil arregle eso ... tenga un dígito antes. :)

int sum = 100000 + a*10000 + b*1000 + c*100 + d*10 + e; 
System.out.println(String.valueOf(sum).substring(1)); 

Mayor inconveniente: crea dos cadenas. Si eso es un gran problema, String.format podría ayudar.

int sum = a*10000 + b*1000 + c*100 + d*10 + e; 
System.out.println(String.format("%05d", sum)); 
1

Puede utilizar

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

El objetivo es ir * de * enteros * a * una cadena ... –

+1

Esto es exactamente lo que quiero ... ¡gracias! – wael34218

3

Para la diversión ... ¿cómo NO para hacerlo ;-)

String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", ""); 
No es que alguien podría realmente pensar en

haciéndolo de esta manera en este caso, pero esto ilustra por qué es importante dar acceso a c algunos miembros del objeto, de lo contrario, los usuarios de la API terminan analizando la representación de cadena de su objeto, y luego se quedan estancados al no poder modificarlo, o arriesgarse a romper su código si lo hace.

8

sólo para no olvidemos el método 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 sólo desea que el primer dígito de cada número ...)

+0

esta es la mejor solución hasta el momento –

0

mejores soluciones ya se discuten. Para el gusto de hacerlo, usted puede hacer esto así: Dado que siempre está tratando con 5 dígitos,

(new java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).toString() 

No estoy diciendo que esto es la mejor manera; simplemente agregando una forma alternativa de ver situaciones similares. :)

0

Cómo acerca de no usar cadenas en absoluto ...

Esto debería funcionar para cualquier número de dígitos ...

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

la pregunta fue: "¿Cómo puedo concatenar estos valores para que termine con ** String ** ..."! –

19

Esto funcionó para mí.

int i = 14; 
int j = 26; 
int k = Integer.valueOf(String.valueOf(i) + String.valueOf(j)); 
System.out.println(k); 

Resultó como 1426

+0

buena lógica para eso. –

+0

gracias su trabajo para mí –

0

Tomando nota del debate here y siguiendo a lo largo de la solución general en el currently most widely accepted answer que probablemente sugerir la siguiente alternativa:

public static String concatenateDigits(int... digits) { 
    String result = ""; 
    for (int digit : digits) { 
    result += digit; 
    } 
    return result; 
} 

Me aplazar a mi primera enlace para la discusión de si esto está de hecho compilado con el mismo código de bytes que la solución original, pero me resulta un poco más intuitivo, más rápido de leer y menos hinchado para seguir el lenguaje de fe en lugar de API. Pero eso es una cuestión de opinión con claridad.

2

Suponiendo que empezar con las variables:

int i=12; 
int j=12; 

Esto dará salida 1212:

System.out.print(i+""+j); 

y esto va a dar salida 24:

System.out.print(i+j); 
-1
public class joining { 

    public static void main(String[] args) { 
     int a=1; 
     int b=0; 
     int c=2; 
     int d=2; 
     int e=1; 

     String j = Long.toString(a); 
     String k = Long.toString(b); 
     String l = Long.toString(c); 
     String m = Long.toString(d); 
     String n = Long.toString(e); 

     /* String s1=Long.toString(a); // converting long to String 
     String s2=Long.toString(b); 
     String s3=s2+s1; 
     long c=Long.valueOf(s3).longValue(); // converting String to long 
     */ 

     System.out.println(j+k+l+m+n); 
    } 
} 
0

Couldn ¿Acabas de hacer cadenas de números, concatenarlas y convertir las cadenas en un valor entero?

1

Después de Java 8 se puede utilizar el StringJoiner, de una manera muy limpia y más flexible (especialmente si usted tiene una lista como entrada en lugar del conjunto conocido 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 necesita un separador uso:

String result = values.stream().map(i -> i.toString()).collect(Collectors.joining(",")); 

Para obtener el siguiente resultado:

1,0,2,2,1