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


public static boolean uniqueCheck(String s)
{
    int checker=0,val=0;
    for (int i = 0; i < s.length(); i++) {
        val=s.charAt(i)-'a';
        if ((checker & (1<< val))>0) return false;
        checker |= (1<<val);
    }
    return true;
}

我想知道该代码将如何忽略Space((并返回true true true for唯一字符。例如:"a b c d"返回true。但是空间也具有Unicode值,当它遇到2次空间时,它应该返回false。为什么不??

这是因为1 << (' ' - 'a')是负面的,因此int由bitmask提取:

(checker & (1 << val))

也为负。

将条件更改为

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

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

例如,该方法声称"Aa""R2"" @"(Space,其次是标志(具有重复的字符,这显然是错误的。

由于ASCII CODEPOINT的排列,这只会发生"a b c d"工作 - 空间恰好与字符串中的任何其他符号相撞,Modulo 32。

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

相关内容

  • 没有找到相关文章

最新更新