我有以下价值观:
int a=1;
int b=0;
int c=2;
int d=2;
int e=1;
我如何连接这些值,以便最终得到一个字符串10221
;请注意,乘以a
10000,乘以b
1000 ......再e
乘以 1 将不起作用b=0
,因此当我将值相加时我会丢失它。
我有以下价值观:
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);
会工作。
注意:这仅在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)...
正如其他答案向您展示的那样,将值保留为 int 是首选。
根本不使用字符串怎么样...
这应该适用于任意数量的数字......
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);
为了好玩......如何不这样做;-)
String s = Arrays.asList(a,b,c,d,e).toString().replaceAll("[\\[\\], ]", "");
并不是说在这种情况下任何人都会真正考虑这样做 - 但这说明了为什么授予对某些对象成员的访问权限很重要,否则 API 用户最终会解析对象的字符串表示,然后你就会陷入困境能够修改它,或者如果你这样做,就有可能破坏他们的代码。
其他人指出,乘以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);
使用 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
编辑:正如 LuCio 评论的,以下代码更短:
Stream.of(a, b, c, d, e).map(Object::toString).collect(Collectors.joining());
int number =0;
int[] tab = {your numbers}.
for(int i=0; i<tab.length; i++){
number*=10;
number+=tab[i];
}
你有你的级联号码。
您可以使用
String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
Assuming you start with variables:
int i=12;
int j=12;
This will give output 1212
:
System.out.print(i+""+j);
And this will give output 24
:
System.out.print(i+j);
我建议将它们转换为字符串。
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());
人们担心当 a == 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));
最佳解决方案已经讨论过了。对于它,你也可以这样做:鉴于你总是处理 5 位数字,
(new java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).toString()
我并不是说这是最好的方法;只是添加另一种方法来查看类似情况。:)
注意:当您尝试在 (string + int) 上使用 + 运算符时,它会将 int 转换为字符串并将它们连接起来!所以你只需要将一个 int 转换为 string
public class scratch {
public static void main(String[] args){
int a=1;
int b=0;
int c=2;
int d=2;
int e=1;
System.out.println( String.valueOf(a)+b+c+d+e) ;
}
//Here is the simplest way
public class ConcatInteger{
public static void main(String[] args) {
int [] list1={1,2,3};
int [] list2={1,9,6};
String stNum1="";
String stNum2="";
for(int i=0 ; i<3 ;i++){
stNum1=stNum1+Integer.toString(list2[i]); //Concat done with string
}
for(int i=0 ; i<3 ;i++){
stNum2=stNum2+Integer.toString(list1[i]);
}
int sum= Integer.parseInt(stNum1)+Integer.parseInt(stNum2); // Converting string to int
System.out.println(sum);
}
}
Couldn't you just make the numbers strings, concatenate them, and convert the strings to an integer value?
public class joining {
public static void main(String[] args) {
int a=1;
int b=0;
int c=2;
int d=2;
int e=1;
String j = Long.toString(a);
String k = Long.toString(b);
String l = Long.toString(c);
String m = Long.toString(d);
String n = Long.toString(e);
/* String s1=Long.toString(a); // converting long to String
String s2=Long.toString(b);
String s3=s2+s1;
long c=Long.valueOf(s3).longValue(); // converting String to long
*/
System.out.println(j+k+l+m+n);
}
}