这很好用:
int foo = bar.charAt(1) - '0';
然而这不是——因为 bar.charAt(x) 返回一个字符:
int foo = bar.charAt(1);
似乎从 char 中减去 ‘0’ 会将其转换为整数。
为什么或如何减去字符串“0”(或者它是一个字符?)将另一个字符转换为整数?
原文由 ledneb 发布,翻译遵循 CC BY-SA 4.0 许可协议
这很好用:
int foo = bar.charAt(1) - '0';
然而这不是——因为 bar.charAt(x) 返回一个字符:
int foo = bar.charAt(1);
似乎从 char 中减去 ‘0’ 会将其转换为整数。
为什么或如何减去字符串“0”(或者它是一个字符?)将另一个字符转换为整数?
原文由 ledneb 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是一个古老的 ASCII 技巧,适用于从“0”开始按顺序排列数字“0”到“9”的任何编码。在 Ascii 中,’0’ 是一个值为 0x30 的字符,’9’ 是一个值为 0x39 的字符。基本上,如果您有一个数字字符,减去“0”会将其“转换”为数字值。
我不得不不同意@Lukas Eder 并认为这是一个可怕的把戏;因为此操作的意图从代码中接近 0%。 If you are using Java and have a String
that contains digits and you want to convert said String
to an int
I suggest that you use Integer.parseInt(yourString);
。
这种技术的好处对未来的维护程序员来说是显而易见的。
原文由 DwB 发布,翻译遵循 CC BY-SA 4.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
这是一个聪明的把戏。 char 实际上与短裤具有相同的类型/长度。现在,当你有一个表示 ASCII/unicode 数字(如“1”)的 char 时,你从中减去可能的最小 ASCII/unicode 数字(例如“0”),那么你将得到该数字的对应值(因此,1)
因为 char 与 short 相同(尽管是无符号的 short),您可以安全地将其转换为 int。如果涉及算术,转换总是自动完成