Java 字符:"Not A Character"有值吗?



在Java中,对于Double,我们有一个NaN的值(不是数字)。

现在,对于Character,我们有类似的"非字符"等价物吗?

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

在数学中,有一个"不是数字"的概念——5除以0不是数字。由于存在这个概念,所以对于double类型存在NaN

字符是将数字映射到字符的抽象概念。"不是字符"的想法并不存在,因为使用的字符集可能会有所不同(UTF-8、UTF-16等)

这样想吧。如果我问你,"5除以0是什么?",你会说它"不是一个数字"。但是,我们确实有一种定义的方法来表示值,即使它不是一个数字。如果我随意画一个歪歪扭扭的字,问你"这是什么字母?",你会说"这不是字母"。但是,除了我刚才画的东西之外,我们没有办法真正表示那个歪歪扭扭的东西。没有真正的方法来传达我刚刚画的"非字符",但有一种方法可以传达5除以0的"非数字"。

u0000是空字符,它仍然是一个字符。你到底想达到什么目的?根据您的目标,u0000可能就足够了。

"非数字"概念并不真正属于Java;相反,Java将double定义为IEEE 754双精度浮点数,它们具有这个概念。(也就是说,如果我没有记错的话,Java确实指定了一些关于NaN的细节,IEEE 754将其留给实现。)

Javachar的类似标准是Unicode:Java将char定义为UTF-16代码单元。

Unicode确实有各种可以使用的保留的未定义字符;例如U+FFFF('uFFFF')将永远不会是字符。或者,您可以使用U+FFFD('uFFFD'),一个字符,但特别是适合替换垃圾或无效字符的"替换字符"。

这取决于你想做什么。如果你想表示缺少一个字符,你可以做

Optional<Character> noCharacter = Optional.empty();

您可以检查字符的代码是否大于或等于"a"的值以及小于或等于"Z"的值。如果你说的不是一个字符,你指的是一个字母表,那就有资格成为不是一个字母。你可以将其扩展到问号、句号、逗号等符号,但如果你想超越ASCII领域,我认为它会失控。

另一种方法是检查某个东西是否是一个数字。如果不是,你可以检查它是否是一个白色字符,如果不是,其他一切都符合字符的条件,因此你会得到答案。这是一个很长的讨论,因为答案各不相同,取决于你对角色的看法。

相关内容