Java角色:“不是一个角色”有价值吗?

时间:2017-01-07 22:43:07

标签: java character

在Java中,对于Double,我们有NaN的值(非数字)。

现在,对于Character,我们是否有类似“非字符”的等价物?

如果答案为否,那么我认为安全替代可能是Character.MIN_VALUE(类型为char且值为\u0000)。你认为这种替代品足够安全吗?或者你有其他建议吗?

4 个答案:

答案 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,因为答案会有所不同,具体取决于您对某个角色的看法。