【问题标题】:Calculate number from CharArray从 CharArray 计算数字
【发布时间】:2015-12-26 01:12:39
【问题描述】:

我有以下代码

 private static int getYear(char[] charArray)
{
    return (int)charArray[0] * 1000 + (int)charArray[1] * 100 + (int)charArray[2] * 10 + (int)charArray[3];
}

此摘录从 4 元素 char 数组中计算一个数字。从“2015”开始有55343。

有什么建议吗?

【问题讨论】:

  • char 转换为 int 会产生 char 的 ASCII 值(至少对于 ASCII 字符),不是它的数值。跨度>

标签: java android arrays string char


【解决方案1】:

假设练习的目的不是使用StringparseInt,则需要将字符'0' 转换为'9' 转换为数字09。这是通过减去字符'0' 来完成的,所以你得到:

private static int getYear(char[] charArray)
{
    return (charArray[0] - '0') * 1000
         + (charArray[1] - '0') * 100
         + (charArray[2] - '0') * 10
         + (charArray[3] - '0');
}

这是因为 Java 以 Unicode 字符存储字符串。 Unicode 是 ASCII 字符集的(巨大)扩展。

查看此 Wikipedia 页面上的 ASCII 可打印字符:https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart

如您所见,0 的字符(字形)具有十进制值 48149,...,而 957

因此,将带有字符 '0'char 转换为 int 将产生值 48。然后我们依靠字符'0''9' 是连续的这一事实,因此减去48('0' 的值)将得到09,这就是我们想要的。

【讨论】:

  • 只是为了兴趣:为什么?
  • 感谢您的解释
【解决方案2】:
 private static int getYear(char[] charArray)
 {
   return Integer.parseInt(String.valueOf(charArray));
 }

【讨论】:

    【解决方案3】:
    private static int getYear(char[] charArray){
        return Integer.parseInt(new String(charArray));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 2017-09-03
      • 1970-01-01
      • 2015-06-29
      • 1970-01-01
      • 2023-03-19
      • 2020-12-21
      相关资源
      最近更新 更多