【问题标题】:How to append to an Integer如何附加到整数
【发布时间】:2018-05-28 04:48:33
【问题描述】:

在我一直从事的一个项目中,我遇到了一个问题,我需要在 Integer 上附加一个数字。问题是你不能附加到Integer,使用一个简单的解决方案,比如:Integer.append(someArrayOfNumbers)orsomeDigit.append(aNumber). 而且实际上并没有任何好的信息。所以我想知道一些算法和“这样的”。

【问题讨论】:

  • 可以举一些关于问题陈述的例子。 ??
  • @downvoter 你能解释一下吗?

标签: java append concatenation


【解决方案1】:

这是我的 base 解决方案(嗯,part 我的,我从这个答案中得到了一些信息,但我不得不修改,here) ,不使用String。我说 base 是因为这个算法不能正常工作,如果数组成员之一超过一位。

public int append(int[] arrayOfIntegers) {

    int total;
    int length = arrayOfIntegers.length; // for quick reference

    total = (int) (arrayOfIntegers[0] * Math.pow(10, length - 1)); // first item times 10 to the power of length minus 1
    for (int i = 1; i < length; i++) {
        total += arrayOfIntegers[i] * Math.pow(10, length - i - 1);
    }
    return total;
}

现在追加一个整数:

int[] array = { 1, 2, 3, 4, 5, 6, 7 };
System.out.println("The array appended: " + append(array));

输出:

The array appended: 1234567

【讨论】:

  • Integer.parseInt(IntStream.of(arrayOfIntegers).mapToObj(Integer::toString).collect(Collectors.joining()))怎么样
  • @shmosel 可以,但是如果您自己制作 appender,那么这应该可以。
  • 什么是appender,它与appender有什么不同?
  • 一个添加到Object 的东西,你想添加到。
  • 整数是不可变的。我不确定你想说什么。
【解决方案2】:

如果您只在右侧或 LSB 后添加 一位数,那么您可以通过乘以十并添加新数字来添加...

public int append(int originalValue, int numberToAppend ) {

     return originalValue*10+ numberToAppend;
}

对于更多的数字,您可以先使用字符串连接

public int append(Integer originalValue, Integer numberToAppend ) {
     String temp =  originalValue.toString()+ numberToAppend.toString();
     return Integer.parseInt(temp);
}

【讨论】:

  • 如果需要追加两个以上的值怎么办?
  • @StarCoder 我已经编辑了我的答案以显示您如何附加多个数字。
  • @Sweeper 值,而不是数字。
  • @shmosel 我可能误解了,OP 的“价值观”是什么意思?
  • @Sweeper 一个整数数组。请参阅 OP 自己的答案。
【解决方案3】:

一种解决方案是将 int 乘以 10 并添加数字,或者如果 int 为负数,则减去数字:

youtInt * 10 + (yourInt < 0 ? -yourDigit : yourDigit)

如果要附加任意数量的数字,请将 int 乘以 pow(10, log10(yourDigits) + 1)

另一种解决方案是将int转换为字符串并在字符串末尾添加数字,然后将其转换回int:

Integer.parseInt(Integer.toString(yourInt) + Integer.toString(yourDigit))

【讨论】:

  • 在您的第一个示例中,如果您需要在第一个数字上附加多个数字怎么办?最后一个示例每次都可以使用,但是如果您不允许使用StringParser 怎么办?
  • @StarCoder 你不能多次这样做吗?如果你有多个数字,比如55,你可以将int乘以pow(10, floor(log10(yourDigits)) + 1)
  • 是的,但是如果你想要一些“快速”和“干净”的东西怎么办?不使用String's。
  • @StarCoder 数学方法不干净吗?好吧,你可以使用StringBuilder,它应该比在循环中连接字符串更快。
  • @StarCoder 字符串有什么问题?如果您尝试连接值,则字符串是自然的解决方案。也许不是最有效的,但肯定是干净的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-27
  • 1970-01-01
相关资源
最近更新 更多