如何在java中连接int值?

如何在java中连接int值?,java,integer,concatenation,string-concatenation,Java,Integer,Concatenation,String Concatenation,我有以下价值观: 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 result = a * 10000 + b * 1000 + c * 100 + d * 10 + e; String s = Integer.toString(result); 会有用的 注意:这仅在a大于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
,因此当我将值相加时,我将丢失它。

实际上

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

如其他答案所示,最好将这些值保持为int。

我建议将它们转换为字符串

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

其他人指出,将
b
乘以1000不应该引起问题,但如果a为零,则最终会丢失它。(您将得到一个4位字符串,而不是5位。)

这里有一种替代(通用)方法-它假设所有值都在0-9范围内。(如果结果不是这样,您很可能应该输入一些代码来抛出异常,但为了简单起见,我将其保留在这里。)

最简单(但有点脏)的方法:


编辑:我不建议这样做,我同意乔恩的评论。添加这些额外的空字符串可能是简洁和清晰之间的最佳折衷方案。

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

人们对a==0时会发生什么感到烦恼。这很容易解决…前面有一个数字。:)

最大的缺点:它会创建两个字符串。如果这是一个大问题,String.format可能会有所帮助

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

String x = a+"" +b +""+ c+""+d+""+ e;
int result = Integer.parseInt(x);
为了好玩。。。如何不去做


在这种情况下,并不是所有人都会真的想到这样做,但这说明了为什么授予某些对象成员访问权限很重要,否则API用户最终会解析对象的字符串表示形式,然后您将无法修改它,或者,如果您这样做,可能会破坏他们的代码。

只是为了不要忘记
格式
方法

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

%1.1s%1.1s%1.1s%1.1s%1.1s%1.1s
如果您只需要每个数字的第一位…

已经讨论了最佳解决方案。 见鬼,你也可以这样做: 考虑到你总是在处理5位数字

(new java.util.Formatter().format("%d%d%d%d%d", a,b,c,d,e)).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 = 14;
int j = 26;
int k = Integer.valueOf(String.valueOf(i) + String.valueOf(j));
System.out.println(k);

假设从变量开始,结果是
1426

int i=12;
int j=12;
这将给出输出
1212

System.out.print(i+""+j); 
这将给出输出
24

System.out.print(i+j);

难道你不能把数字串成字符串,连接起来,然后把字符串转换成整数值吗?

使用Java 8和更高版本,你可以使用,一种非常干净和灵活的方式(特别是如果你有一个列表作为输入,而不是一组已知的变量a-e):

要获得以下结果:

1,0,2,2,1

编辑:正如LuCio所评论的,以下代码较短:

Stream.of(a, b, c, d, e).map(Object::toString).collect(Collectors.joining());
int number=0;
int[]tab={您的号码}。
对于(int i=0;i
注意:当您尝试在(string+int)上使用+运算符时,它会将int转换为字符串和
把他们干掉!
因此,您只需要将一个int转换为string



肮脏?什么?我不喜欢这个-我认为
a+“”+b+“”+c+“”+d+“”+e
会更清晰,当然,虽然更冗长。看“a+b”太容易了我想这将是把整数加在一起。@Polygene:谢谢你指出这个问题-我以前没有发现过它…我想我会使用带有链式附录的StringBuffer。@Andrei:所有邪恶的根源又是什么?此外,一行字符串连接将被编译成StringBuilder。这只是在更复杂的情况下lex场景(通常涉及循环)中应该避免串联。他似乎想要一个字符串作为最终结果,因此解析是不必要的(如果真的需要,正确的解决方案是将数字相加,而不需要任何字符串的愚蠢行为)他想要一个字符串,这一点很好,但如果只是将数字相加,结果将是6,而不是10221…@Polygene润滑油:完全同意你的观点-忘记这个答案,Michael或Jon的答案是根据给出的信息得出的最佳解决方案:)@Polygene润滑油:。。。或者你的;-)<代码>StringBuilder
在这种情况下是一种过度杀伤力;普通的旧
+
很好,可读性更好。谁能读?在这种情况下,我更喜欢StrugPuff/StrugBuudor,并同意乔恩Switts评论迈克尔斯的回答。考虑一下,把它添加到No.No如果我的第一个值等于0,它仍然有效。它将为您提供适当的值。你需要精确到5个字符长吗?谢谢大家的回答,我一直使用5个数字,但在很多情况下,它们以0开头,所以Michael's way就是wat way;-)这也适用于0。对于5位数字,它总是给出与Michael相同的结果;它唯一的优点(您不需要)是它可以使用可变位数。Varargs+foreach组合是最好的。它更干净,性能也更好。。。字符串连接很混乱,会导致大量不必要的字符串生成。现代虚拟机可能会缓解这一问题。。。不确定,但我认为这更干净。使用Horner方案:(((a*10+b)*10+c)*10+d)*10+e。当你把它们加起来时,为什么会失去b?更多关于Horner方案:这是
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 = 14;
int j = 26;
int k = Integer.valueOf(String.valueOf(i) + String.valueOf(j));
System.out.println(k);
int i=12;
int j=12;
System.out.print(i+""+j); 
System.out.print(i+j);
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);  
    }
}
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(","));
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];
}
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) ;
}