【发布时间】:2013-02-14 18:32:39
【问题描述】:
现在在尝试匹配两个 Scala 字符串时处理一个奇怪的问题。当试图确定以下两个字符串是否相同时:
SM8lz5IEIWs7TUhR3ke27pnY3XsjojxqaMEg+ARCGs1nm3sVkwA+CM+XJfdsUxqzqH7LZdkflvny
z621tYkmXA== 和 SM8lz5IEIWs7TUhR3ke27pnY3XsjojxqaMEg+ARCGs1nm3sVkwA+CM+XJfdsUxqzqH7LZdkflvny
z621tYkmXA==
Scala 返回false。因此,如果我执行以下操作 if(hash1 == hash2) 它会返回 false。
我怀疑这是空格或字符编码问题,因为哈希匹配仅在尝试匹配在不同操作系统的计算机上生成的哈希时才会失败。我已经尝试使用正则表达式去除空格,但仍然失败。
我忽略了什么?在 Scala 中是否有更好的方法来清理和匹配哈希?
更新
比较两个字符串后,Scala 认为hash2 是比hash1 长的单个字符。所以我在两个哈希上运行了以下函数:.trim.replaceAll("""(?m)\s+$""", "")。不过,它说它们不一样。还有哪些其他角色可能会干扰?
【问题讨论】:
-
我已经在 osx 10.8 上尝试过,并且哈希值与“true”相比。您可以尝试运行
hash1.diff(hash2)以查看是否存在一些实际差异(它应该产生不匹配的符号)。 -
刚刚意识到 Scala 认为一个字符比另一个长。将发布更新。
-
尝试打印以下内容(
s1和s2是您的两个字符串):s1.zip(s2).zipWithIndex.find{ case ((c1, c2), i) => c1 != c2 }。这将告诉您它们在什么索引处开始分歧,以及两个不同的字符是什么。这应该有助于查明问题。
标签: string scala character-encoding pattern-matching