Как связать международные значения в Java?

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

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 и поэтому я потеряю его, когда я сложу значения.

32
задан skolima 31 January 2012 в 10:45
поделиться

13 ответов

Я бы предложил преобразовать их в строки.

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

Затем обратное преобразование в целое число:

Integer.valueOf(concatenated.toString());
1
ответ дан 27 November 2019 в 19:41
поделиться

Люди беспокоились о том, что происходит, когда == 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));
1
ответ дан 27 November 2019 в 19:41
поделиться

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

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

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

41
ответ дан 27 November 2019 в 19:41
поделиться

Вы можете использовать

String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
1
ответ дан 27 November 2019 в 19:41
поделиться

Используйте 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
ответ дан 27 November 2019 в 19:41
поделиться

Другие отмечали, что умножение 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);
4
ответ дан 27 November 2019 в 19:41
поделиться

просто чтобы не забыть метод формат

String s = String.format("%s%s%s%s%s", a, b, c, d, e);

(% 1.1s% 1.1s% 1.1s% 1.1s % 1.1s , если вам нужна только первая цифра каждого числа ...)

12
ответ дан 27 November 2019 в 19:41
поделиться

Лучшие решения уже обсуждаются. Да черт возьми, вы также можете сделать это: Учитывая, что вы всегда имеете дело с 5 цифрами,

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

я не утверждаю, что это лучший способ; просто добавив альтернативный способ взглянуть на похожие ситуации. :)

0
ответ дан 27 November 2019 в 19:41
поделиться
StringBuffer sb = new StringBuffer();
sb.append(a).append(b).append(c)...

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

5
ответ дан 27 November 2019 в 19:41
поделиться

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

public static String concatenateDigits(int... digits) {
   StringBuilder sb = new StringBuilder(digits.length);
   for (int digit : digits) {
     sb.append(digit);
   }
   return sb.toString();
}
31
ответ дан 27 November 2019 в 19:41
поделиться

На самом деле

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

11
ответ дан 27 November 2019 в 19:41
поделиться

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

10000
    0
  200
   20
    1
=====
10221
5
ответ дан 27 November 2019 в 19:41
поделиться

Ради забавы ... как НЕ делать это ; -)

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

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

3
ответ дан 27 November 2019 в 19:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: