【问题标题】:Char variable minus char variable parse to Int in javachar变量减去char变量在java中解析为Int
【发布时间】:2021-05-24 19:31:05
【问题描述】:

我知道这是微不足道的,但我找不到正确的解释。我有以下代码

str="1230"
int rez=str.charAt(3) - '0';
rez=3;

这个解析是如何工作的?

【问题讨论】:

  • 有什么问题? (此外,char 或多或少是整数,并且对它们进行算术运算,这就是您可以执行 c - '0' 的原因。
  • "这个解析是如何工作的?" - 您是在问语言解析器如何解析源代码?
  • 也许您应该深入了解计算机工作原理以及在屏幕上显示数字或字母所需的基础知识。可以从这里开始:en.wikipedia.org/wiki/ASCII
  • @NoDataFound - 请参阅我对下面答案的评论。

标签: java parsing char


【解决方案1】:

只要字符是数字,减去'0'就可以得到等价的int值。 '0'的ASCII编码是十进制的48'1'是十进制的49

So '8' - '0' = 56 - 48 = 8;

对于你的号码,你可以像这样解析整个字符串(假设所有字符都是数字,否则结果没有意义)。

String v = "1230";
int result = 0; // starting point
for (int i = 0; i < v.length(); i++) {
    result = result* 10 + v.charAt(i) -'0';
}
System.out.println(result);

打印

1230

解释

In the above loop, first time thru
result = 0 * 10 + '1'-'0 = 1
second time thru 
result = 1 * 10  + '2'-'0' = 12
third time thru 
result = 12 * 10  + '3'-'0' = 123
last time thru 
result = 123 * 10  + '0'-'0' = 1230

【讨论】:

    【解决方案2】:

    “幕后”char 只是一个具有特定范围的 int(非常简单的解释)。

    尝试以下代码说服自己:

    System.out.println((int) '0'); // this won't output 0
    System.out.println((int) 'a'); // this work as well
    

    这就是为什么chars 上可以进行算术运算的原因。

    【讨论】:

    • 当 OP 明显试图对 char 数据类型进行算术运算时,这是一种误导。例如,将 OP 的输入字符串更改为“123A”并执行与 OP 问题中相同的算术运算。结果是毫无意义的。也许你应该指出这一点?
    • 在幕后,char 是一个 UTF-16 字符,以几种不同的方式表示 - 其中一种方式是表示特定 UTF-16 字符的整数值。
    • 当然@randy,请随时编辑我的答案,因为我不确定它为什么会误导
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 2020-08-12
    • 1970-01-01
    相关资源
    最近更新 更多