【问题标题】:Convert int to array char in Java在Java中将int转换为数组char
【发布时间】:2013-10-14 18:35:39
【问题描述】:

我试图在不使用字符串操作的情况下将整数转换为字符数组。

我的尝试是:

int number = 12;
char[] test = Character.toChars(number);

for (char c : test)
    System.out.println(c);

没有输出,应该给我:

'1'

'2'

我该如何解决这个问题?谢谢!

【问题讨论】:

  • 遍历Integer.toString()的实现及相关方法。
  • 为什么限制String 操作?在我漫长的职业生涯中,从来没有人对我施加过这样的限制。
  • 您误解了 Character.toChars() 方法的实际作用。它“将指定的字符(Unicode 代码点)转换为存储在 char 数组中的 UTF-16 表示形式。”其int 参数指定“Unicode 代码点
  • @DavidWallace - 可能是作业。
  • 啊!老师让他们为现实世界做准备,这永远不会发生。别再说了。

标签: java


【解决方案1】:

试试这样的:

int number = 12345;

char[] arr = new char[(int) (Math.log10(number) + 1)];

for (int i = arr.length - 1; i >= 0; i--) {
    arr[i] = (char) ('0' + (number % 10));
    number /= 10;
}

System.out.println(Arrays.toString(arr));
[1、2、3、4、5]

注意floor(log<sub>10</sub>(n) + 1) 返回n 中的位数。此外,如果您想保留原始号码,请创建一个副本并在 for-loop 中使用它。

另外请注意,如果您还打算处理非正整数,则可能需要修改上面的代码。但是,总体思路应该保持不变。

【讨论】:

  • 是的,但是log10 可以使用双精度数,因此在某些实现中可能会出现舍入错误。这意味着在某些情况下,数组的长度可能不足以存储所有字符。所以这个答案不如只适用于整数、字符串和字符的答案(就像这里的其他三个答案一样)。
  • @DavidWallace 实现应该是由the docs 定义的。至于舍入错误,请提供这种情况的示例(即,这不起作用的肯定number)。
  • 我认为可以安全地假设 OP 将使用标准 java.lang.Math
  • java.lang.Math 的文档说结果将在正确答案的 1 ULP 内。这还不够好。
  • @DavidWallace 好的,那么你有一个不适用的例子吗?我自己也很想看到一个。
【解决方案2】:

char[] test = Integer.toString(number).toCharArray();

【讨论】:

  • 不使用字符串操作
  • 我把这个留在这里,因为未来的 SO 用户可能会遇到这个问题,同时寻找一种方法来做同样的事情,但没有奇怪的限制。在他们的情况下,这是一个有用的答案,尽管我坦率地承认它不能满足 OP 的直接需求。
【解决方案3】:

提取数字的每个数字,将其转换为字符(通过添加'0')并将它们存储到char数组中。让我们知道您的尝试。

【讨论】:

  • 我认为不能保证“0”编码为 48,“1”编码为 49,依此类推。依赖这种行为是不好的做法。
  • @bdares A charUTF-16 code unit。这是无法改变的。
  • 我相信有这样的保证 - Java 定义了它的字符使用什么编码。但为了可读性,最好添加“0”(字符),而不是 48。
  • 当然,我从未听说过 java char 偏离 ASCII
  • 即使这在技术上总是正确的,它仍然不是一个干净的解决方案。
【解决方案4】:

+1 @arshajii 的代码 log10(n) + 1 对我来说也是新事物。如果你打算使用Vectors 而不是arrays,你也可以按照这个过程(但向量的元素顺序相反)你永远不需要计算数字本身的大小 p>

public static Vector<Character> convert(int i) {
        Vector<Character> temp = new Vector<Character>();
        while (i > 0) {
            Character tempi = (char) ('0' + i % 10);
            i = i / 10;
            temp.add(tempi);
        }
        return temp;
    }

【讨论】:

    猜你喜欢
    • 2013-12-11
    • 2013-08-01
    • 2014-05-02
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    相关资源
    最近更新 更多