次の値があります。
int a=1;
int b=0;
int c=2;
int d=2;
int e=1;
これらの値を連結して、10221
; a
に10000、b
に1000 .....、およびe
に1を掛けても、b=0
したがって、値を加算すると失われます。
最も簡単な(しかし多少汚い)方法:
String result = "" + a + b + c + d + e
編集:私はこれを推奨せず、ジョンのコメントに同意します。これらの余分な空の文字列を追加することは、おそらく短さと明瞭さの間の最良の妥協案です。
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();
}
これは私のために働いた。
int i = 14;
int j = 26;
int k = Integer.valueOf(String.valueOf(i) + String.valueOf(j));
System.out.println(k);
1426
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
各番号の最初の桁のみが必要な場合...)
実際、
int result = a * 10000 + b * 1000 + c * 100 + d * 10 + e;
String s = Integer.toString(result);
will動作します。
注:これは、a
が0より大きく、b
、c
、d
、およびe
のすべてが[ 0、9]。たとえば、b
が15の場合、Michaelのメソッドは、おそらく必要な結果を取得します。
b
に1000を掛けても、値は失われません。数学については以下を参照してください。
10000
0
200
20
1
=====
10221
StringBuffer sb = new StringBuffer();
sb.append(a).append(b).append(c)...
他の答えが示すように、値を整数として保持することをお勧めします。
他の人は、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);
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());
楽しみのために...方法[〜#〜] not [〜#〜]それを行うには; -)
String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", "");
この場合、誰もが実際にこのように考えるとは限りませんが、これは特定のオブジェクトメンバーへのアクセスを許可することが重要である理由を示しています。それを変更できるか、コードを壊す危険があります。
使用できます
String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
それらを文字列に変換することをお勧めします。
StringBuilder concatenated = new StringBuilder();
concatenated.append(a);
concatenated.append(b);
/// etc...
concatenated.append(e);
次に、整数に戻します:
Integer.valueOf(concatenated.toString());
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());
文字列をまったく使用しないのはどうですか...
これは、任意の桁数で機能するはずです...
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);
変数から始めると仮定します。
int i=12;
int j=12;
これにより、出力1212
:
System.out.print(i+""+j);
そして、これは出力24
:
System.out.print(i+j);
== 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));
最適なソリューションはすでに説明されています。それについては、同様にこれを行うことができます。常に5桁を処理していることを考えると、
(new Java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).toString()
これが最善の方法であると主張しているわけではありません。同様の状況を見るための代替方法を追加するだけです。 :)