字符串比较java中不同方式的区别

时间:2012-03-06 08:48:02

标签: java string comparison hashmap string-comparison

我有两个字符串,我想我的意思是根据我的眼睛,它们是完全相同的。但他们的比较给了我错误的结果。

让我简单解释一下,

String bir = "brescia calcio";
String iki = "brescia calcio‎";
 if("brescia calcio".equals("brescia calcio"))
 System.out.println(("deneme"));



HashMap<String, Long> deneme = new HashMap<String, Long>();
HashMap<String, Long> deneme2 = new HashMap<String, Long>();


if (bir.equals(iki)) {
    System.err.println("a");
}
deneme.put(bir, (long) 1);
deneme.put(iki, (long) 2);

deneme2.put("brescia calcio", (long) 3);
deneme2.put("brescia calcio", (long) 4);



System.err.println(deneme.size());
System.err.println(deneme2.size());

上面的代码产生

deneme
2
1

输出。我对它完全感到困惑。有人可以解释为什么会如此。感谢。

2 个答案:

答案 0 :(得分:11)

在你的第二个字符串iki中,你最后有一个不可打印的字符。当我将该字符串复制并粘贴到vim时,我看到了

String iki = "brescia calcio‎<200e>";

我敢打赌,一旦你删除了这个角色,神秘就会被解决。

如果您想知道,U+200Eleft-to-right mark

答案 1 :(得分:2)

最后有一个不可打印的字符,你无法看到。

String iki = "brescia calcio‎";

for(int i=0;i<iki.length();i++)
    System.out.println(i+": "+iki.charAt(i)+" (" + (int) iki.charAt(i)+")");

打印

0: b (98)
1: r (114)
2: e (101)
3: s (115)
4: c (99)
5: i (105)
6: a (97)
7:   (32)
8: c (99)
9: a (97)
10: l (108)
11: c (99)
12: i (105)
13: o (111)
14: ‎ (8206)