У меня есть следующие значения:
int a=1;
int b=0;
int c=2;
int d=2;
int e=1;
Как я связываю эти значения так, чтобы я закончил со Строкой, которая является 10221
; обратите внимание на то, что умножение a
10 000, b
1 000..... и e
1 не будет, работая с тех пор b=0
и поэтому я потеряю его, когда я сложу значения.
Я бы предложил преобразовать их в строки.
StringBuilder concatenated = new StringBuilder();
concatenated.append(a);
concatenated.append(b);
/// etc...
concatenated.append(e);
Затем обратное преобразование в целое число:
Integer.valueOf(concatenated.toString());
Люди беспокоились о том, что происходит, когда == 0. Это легко исправить ... перед ним стоит цифра. :)
int sum = 100000 + a*10000 + b*1000 + c*100 + d*10 + e;
System.out.println(String.valueOf(sum).substring(1));
Самый большой недостаток: создается две строки. Если это важно, String.format может помочь.
int sum = a*10000 + b*1000 + c*100 + d*10 + e;
System.out.println(String.format("%05d", sum));
Самый простой (но несколько грязный) способ:
String result = "" + a + b + c + d + e
Изменить: Я не рекомендую это и согласен с комментарием Джона. Добавление лишних пустых строк, вероятно, лучший компромисс между краткостью и ясностью.
Вы можете использовать
String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
Используйте 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());
Другие отмечали, что умножение b
на 1000 не должно вызывать проблем - но если бы a было равно нулю, вы бы его потеряли. (Вы получите строку из 4 цифр вместо 5.)
Вот альтернативный подход (общего назначения), который предполагает, что все значения находятся в диапазоне 0-9. (Вполне возможно, что вам следует добавить какой-то код, чтобы генерировать исключение, если это окажется неправдой, но я оставил его здесь для простоты.)
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);
}
В этом случае вы бы вызывали это с помощью:
String result = concatenateDigits(a, b, c, d, e);
просто чтобы не забыть метод формат
String s = String.format("%s%s%s%s%s", a, b, c, d, e);
(% 1.1s% 1.1s% 1.1s% 1.1s % 1.1s
, если вам нужна только первая цифра каждого числа ...)
Лучшие решения уже обсуждаются. Да черт возьми, вы также можете сделать это: Учитывая, что вы всегда имеете дело с 5 цифрами,
(new java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).toString()
я не утверждаю, что это лучший способ; просто добавив альтернативный способ взглянуть на похожие ситуации. :)
StringBuffer sb = new StringBuffer();
sb.append(a).append(b).append(c)...
Как показывают другие ответы, предпочтительнее сохранять значения как int.
Решение Майкла Боргвардта лучше всего подходит для 5 цифр, но если у вас есть переменное количество цифр, вы можете использовать что-то вроде этого:
public static String concatenateDigits(int... digits) {
StringBuilder sb = new StringBuilder(digits.length);
for (int digit : digits) {
sb.append(digit);
}
return sb.toString();
}
На самом деле
int result = a * 10000 + b * 1000 + c * 100 + d * 10 + e;
String s = Integer.toString(result);
будет работать.
Примечание: это будет работать, только если a
больше 0 и все b
, c
, d
и ] e
находятся в [0, 9]. Например, если b
равно 15, метод Майкла даст вам желаемый результат.
Если вы умножите b
на 1000, вы не потеряете ни одного значения. См. Математику ниже.
10000
0
200
20
1
=====
10221
Ради забавы ... как НЕ делать это ; -)
String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", "");
Не то, чтобы кто-то действительно подумал в данном случае это делается таким образом - но это иллюстрирует, почему важно предоставить доступ к определенным членам объекта, иначе пользователи API будут анализировать строковое представление вашего объекта, а затем вы застряли, не имея возможности его изменить, или рискуете взломать их код, если вы это сделаете.