Как объединить значения INT в Java? - PullRequest
30 голосов
/ 20 апреля 2010

У меня есть следующие значения:

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

Как мне объединить эти значения, чтобы я получил строку 10221; обратите внимание, что умножение a на 10000, b на 1000 ..... и e на 1 не будет работать с b=0, и поэтому я потеряю его, когда добавлю значения.

Ответы [ 19 ]

38 голосов
/ 20 апреля 2010

Самый простой (но несколько грязный) способ:

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

Редактировать: Я не рекомендую этого и согласен с комментариями Джона Добавление этих лишних пустых строк, вероятно, является лучшим компромиссом между краткостью и ясностью.

30 голосов
/ 20 апреля 2010

Решение Михаэля Боргвардта лучше всего подходит для 5 цифр, но если у вас переменное количество цифр, вы можете использовать что-то вроде этого:

public static String concatenateDigits(int... digits) {
   StringBuilder sb = new StringBuilder(digits.length);
   for (int digit : digits) {
     sb.append(digit);
   }
   return sb.toString();
}
26 голосов
/ 07 ноября 2012

Это сработало для меня.

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

Получилось как 1426

11 голосов
/ 20 апреля 2010

только чтобы не забыть 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, если вам нужна только первая цифра каждого числа ...)

11 голосов
/ 20 апреля 2010

На самом деле,

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, метод Майкла даст вам результат, который вы, вероятно, хотите.

5 голосов
/ 20 апреля 2010
StringBuffer sb = new StringBuffer();
sb.append(a).append(b).append(c)...

Хранение значений в виде int предпочтительно для вас, как показывают другие ответы.

5 голосов
/ 20 апреля 2010

Если вы умножите b на 1000, вы не потеряете ни одно из значений. См. Ниже по математике.

10000
    0
  200
   20
    1
=====
10221
4 голосов
/ 20 апреля 2010

Другие отметили, что умножение 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);
3 голосов
/ 26 марта 2017

Используя Java 8 и выше, вы можете использовать StringJoiner , очень чистый и более гибкий способ (особенно если у вас есть список в качестве ввода вместо известного набора переменных a-e):

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

Если вам нужен разделитель:

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

Чтобы получить следующий результат:

1,0,2,2,1

Редактировать : как прокомментировал LuCio, следующий код короче:

Stream.of(a, b, c, d, e).map(Object::toString).collect(Collectors.joining());
3 голосов
/ 20 апреля 2010

Для удовольствия ... как НЕ , чтобы сделать это ; -)

String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", "");

Не то, чтобы кто-то действительно думал о том, чтобы сделать это таким образом в этом случае - но это иллюстрирует, почему важно предоставить доступ к определенным членам объекта, в противном случае пользователи API в конечном итоге анализируют строковое представление вашего объекта, а затем застрял не в состоянии изменить его, или рискуете нарушить их код, если вы это сделаете.

...