检查字符串中的唯一字符(java)

时间:2017-06-30 07:40:37

标签: java string unicode logic logical-operators

"a b c d"

我想知道这段代码如何忽略space()并为唯一字符返回true。 举个例子:$ pydocstyle test.py test.py:18 in private nested class `meta`: D101: Docstring missing test.py:27 in public function `get_user`: D300: Use """triple double quotes""" (found '''-quotes) test:75 in public function `init_database`: D201: No blank lines allowed before function docstring (found 1) 返回true。但是空间也有Unicode值,当遇到空格2次时它应该返回false。为什么不呢?

2 个答案:

答案 0 :(得分:2)

因为1 << (' ' - 'a')是负数,所以由位掩码提取的int:

(checker & (1 << val))

也是否定的。

将条件更改为

if ((checker & (1<< val)) != 0) return false;
                       // ^^ Here.

但是:您只有32位用于指示先前检测到的char,并且有{655}可能的val值:此方法对其他方法会很快失败字符串。

例如,该方法会声称"Aa""R2"" @"(空格,后跟at符号)有重复的字符,这显然是错误的。

由于ASCII码点的排列,只有发生发生才能用于"a b c d" - 空间恰好不会与字符串中的任何其他符号冲突,模32。

答案 1 :(得分:-1)

您应该使用replaceAll()替换string中的所有空格(或您指定的任何其他字符)。