在Java中,对于Double
,我们有NaN
的值(非数字)。
现在,对于Character
,我们是否有类似“非字符”的等价物?
如果答案为否,那么我认为安全替代可能是Character.MIN_VALUE
(类型为char
且值为\u0000
)。你认为这种替代品足够安全吗?或者你有其他建议吗?
答案 0 :(得分:2)
在数学中,有一个“不是数字”的概念 - 5除以0不是数字。由于存在此概念,因此NaN
类型有double
。
字符是将数字映射到字符的抽象概念。 “不是一个角色”的想法并不存在,因为使用的字符集可能会有所不同(UTF-8,UTF-16等)。
这样想。如果我问你,“什么是5除以0?”,你会说它不是“数字”。但是,我们确实有一种定义的方式来表示价值,即使它不是一个数字。如果我画一个随意的波形并问你,“这是什么字母?”,你会说“这不是一封信”。但是,我们没有有办法在我刚画的东西之外实际表示那个波浪形。没有真正的方式来传达我刚刚绘制的“非角色”,但有一种方法可以传达5的“非数字”除以0。
\u0000
是空字符,仍然是一个字符。你到底想要达到什么目的?根据您的目标\u0000
可能就足够了。
答案 1 :(得分:1)
“not-a-number”概念并不属于Java;相反,Java将double
定义为具有该概念的IEEE 754 double precision floating-point numbers。 (也就是说,如果我没记错的话,Java确实指定了IEEE 754对实现开放的NaN的一些细节。)
Java char
的类似标准是Unicode:Java将char
定义为UTF-16代码单元。
Unicode确实有各种可以使用的保留未定义字符;例如,U+FFFF('\uFFFF'
)永远不会是一个角色。或者,您可以使用U+FFFD('\uFFFD'
),其中是一个字符,但特别是适合替换垃圾或无效字符的“替换字符”。
答案 2 :(得分:1)
取决于你想要做的事情。如果你试图表现出你可以做的角色的缺失
Optional<Character> noCharacter = Optional.empty();
答案 3 :(得分:0)
您可以检查角色的代码是否大于或等于&#39; a&#39;小于或等于&#39; Z&#39;的值。如果不是字符,那就不是字符,你的意思是字母。您可以将其扩展为问号,句号,逗号等符号,但如果您想要超过ASCII区域,我认为它已失控。
另一种方法是检查某些内容是否为数字。如果不是,你可以检查它是否是一个白色字符,如果不是,那么其他一切都有资格作为一个字符,因此你得到你的答案。 这是一个长期讨论的IMO,因为答案会有所不同,具体取决于您对某个角色的看法。