web-dev-qa-db-ja.com

javaでint値を連結するにはどうすればよいですか?

次の値があります。

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

これらの値を連結して、10221; aに10000、bに1000 .....、およびeに1を掛けても、b=0したがって、値を加算すると失われます。

30
Shamli

最も簡単な(しかし多少汚い)方法:

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

編集:私はこれを推奨せず、ジョンのコメントに同意します。これらの余分な空の文字列を追加することは、おそらく短さと明瞭さの間の最良の妥協案です。

40

Michael Borgwardtのソリューションは5桁に最適ですが、桁数が可変の場合は、次のようなものを使用できます。

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

これは私のために働いた。

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

1426

26
Zeeshan

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各番号の最初の桁のみが必要な場合...)

12

実際、

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

will動作します。

注:これは、aが0より大きく、bcd、およびeのすべてが[ 0、9]。たとえば、bが15の場合、Michaelのメソッドは、おそらく必要な結果を取得します。

11
T .

bに1000を掛けても、値は失われません。数学については以下を参照してください。

10000
    0
  200
   20
    1
=====
10221
5
Daniel A. White
StringBuffer sb = new StringBuffer();
sb.append(a).append(b).append(c)...

他の答えが示すように、値を整数として保持することをお勧めします。

5
Björn

他の人は、bに1000を掛けても問題は発生しないと指摘していますが、aがゼロの場合、それを失うことになります。 (5ではなく4桁の文字列を取得します。)

これが代替(汎用)アプローチです。これは、すべての値が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
Jon Skeet

Java 8以降では、非常にクリーンで柔軟な方法である StringJoiner を使用できます(特に、既知の変数セットの代わりに入力としてリストがある場合) 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);

セパレータが必要な場合:

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

次の結果を取得するには:

1,0,2,2,1

Edit:LuCioがコメントしたように、次のコードは短くなります:

Stream.of(a, b, c, d, e).map(Object::toString).collect(Collectors.joining());
3
flavio.donze

楽しみのために...方法[〜#〜] not [〜#〜]それを行うには; -)

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

この場合、誰もが実際にこのように考えるとは限りませんが、これは特定のオブジェクトメンバーへのアクセスを許可することが重要である理由を示しています。それを変更できるか、コードを壊す危険があります。

3
JRL

使用できます

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

それらを文字列に変換することをお勧めします。

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

次に、整数に戻します:

Integer.valueOf(concatenated.toString());
1
Grundlefleck

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

文字列をまったく使用しないのはどうですか...

これは、任意の桁数で機能するはずです...

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

変数から始めると仮定します。

int i=12;
int j=12;

これにより、出力1212

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

そして、これは出力24

System.out.print(i+j);
1
ajay

== 0の場合に何が起こるかを人々は心配していました。そのための簡単な修正...その前に数字があります。 :)

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

最大の欠点:2つの文字列が作成されます。それが大したことであれば、String.formatが役立ちます。

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

最適なソリューションはすでに説明されています。それについては、同様にこれを行うことができます。常に5桁を処理していることを考えると、

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

これが最善の方法であると主張しているわけではありません。同様の状況を見るための代替方法を追加するだけです。 :)

0
ring bearer