Java中连接两个整数

8

有没有一种简单的方法,无需使用java库就可以连接两个整数?也许可以用数学方法吗?

比如说我有9和10,我想要它变成910,或者224和225,我想要它变成224225。


3
你希望结果也是一个整数吗? - Mark Elliot
4
我有什么遗漏吗?这样怎么样:String result=9+""+10; 或者 int i=Integer.valueOf(9+""+10); - Aravind Yarram
是的!请返回整数作为最终结果! - aherlambang
相关内容:C语言:https://stackoverflow.com/questions/12700497/how-to-concatenate-two-integers-in-c - undefined
5个回答

19

java.lang.* 中的任何内容都应该是合理的选择...

int a = Integer.parseInt(Integer.toString(9) + Integer.toString(10));

补充:

我不喜欢下面的语法,因为操作符重载并没有像上面那样清晰地声明意图。主要是因为如果误将空字符串去掉,结果会不同。

int a = Integer.parseInt(9 + "" + 10);

1
我喜欢这样写:int a = Integer.parseInt(9 +""+ 10)。更加精确。 - Adeel Ansari
1
@Adeel -- 我不同意。请阅读我对pst答案的评论。 - Jeremy
@Jeremy:这里不适用。因为如果你意外删除了“empty_quotes”,那么第二天你会想,为什么我要将“int”解析为“int”。这应该让你想到,你从一开始就没有那么愚蠢去做这件事情。所以,肯定有些东西丢失了。哦对了,“empty_quotes”。 - Adeel Ansari
在 OP 请求最终结果为整数而不是字符串之前,我发表了那些评论。如果你真的想深入了解,我的答案更精确。你的只是语法糖。无论哪种方式,它都能完成相同的任务。 - Jeremy
@Adeel:我不明白这怎么能“更精确”。如果有什么区别,那只是更短而已。 - Grodriguez
@Grodriguez:好的,是的,它更短了。@Jeremy:你建议的很好,我只是分享了我的喜好。我声称那是精确的,但可能不是,只是稍微短一点。 - Adeel Ansari

18

这将按预期返回一个整数,但仅在 b > 0 时有效。

int a = 224;
int b = 225;
int c = (int) Math.pow(10, Math.floor(Math.log10(b))+1)*a + b; // 224225
只是一个简单的解释:这个代码块决定了数字 b 的位数,然后计算出一个乘法因子,使得数字 a 在十进制下比 b 多移动一位。
在这个例子中,b 有3位数字,floor(log10(b)) 返回2(可以通过直觉理解为 10^2=10010^3 = 1000,我们在225之间)。然后,我们计算一个乘法因子 10^(2+1),这是 1000。当我们将 a 乘以1000时,得到的结果是 224000。将 224000 加上 225 就得到了所需的结果 224225
但是当 b == 0 时会出现错误,因为 log10(0) 是未定义的。

4

您(很可能)需要字符串拼接(如果您还需要一个整数结果,可以参见其他答案)。如果这是真的,关于拼接,想象一下a和b是整数:

"" + a + b

这样做的原因是,如果其中一个操作数是字符串,+运算符会被重载。它会将另一个操作数转换为字符串(如果需要),并生成一个新的连接字符串。你也可以调用Integer.toString(a) + Integer.toString(b)或使用适当的String.format方法,但这些方法更冗长。

2
我一直不喜欢这种表示法。如果字符串被某种方式取出,连接 ab 的意图就不清楚了。 - Jeremy
@Jeremy 静态类型是我的好朋友 :-) - user166390
2
我的观点是,如果我在周五晚上不小心删除了字符串,并在周一早上回来修复我的代码,我会认为他们想要的是Integer.toString(a+b) - Jeremy
2
@Jeremy - 我明白你的观点,但我认为那是个非常薄弱的论点(在我看来)。在Java程序中,有很多微小的修改可以使原本的意图变得模糊;例如,在算术表达式中将+改为*,将&&改为||等。真正的答案是在阅读和修改代码时要小心谨慎。 - Stephen C
@Stephen - 我理解你的意思,我也同意。成为一名谨慎的编程人员正是我的观点。如果你有一个可能会产生歧义的陈述(无论编译器是否能够发现错误),你需要更好地编写它或者进行详细的文档说明。有很多人在编码时很不小心。我想我需要像写代码一样认真对待我的英语了,哈哈。 - Jeremy
显示剩余2条评论

3

以下是我适用于 a、b >= 0 的版本。

这个版本会稍微冗长一些,但比对数取对数的方法快10倍,比拼接字符串的方法快5倍。

int concat(int a, int b)
{
   if ( b == 0 )
      a *= 10;
   else
   {
      int tempB = b;
      while ( tempB > 0 )
      {
         tempB /= 10;
         a *= 10;
      }
   }
   return a + b;
}

请随意修改此代码以使其适用于负数。


0

a + "" + b

会导致错误 "不兼容的类型"

// The left operand to previousOperator.
private int leftOperand;

leftOperand = leftOperand + " " + number;

在方法声明中,number被定义为int类型。

这个方法是有效的。

import java.lang.*

leftOperand = Integer.parseInt(Integer.toString(leftOperand) + Integer.toString(number));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接