Различия строк сравнения по-разному в Java - PullRequest
3 голосов
/ 06 марта 2012

У меня есть две строки, и я думаю, что, по моим глазам, они абсолютно одинаковы. Но их сравнение дает мне неверный результат.

позвольте мне кратко объяснить,

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 * * +1010

выход. я совершенно смущен этим. Может кто-нибудь объяснить, пожалуйста, почему это так. спасибо.

Ответы [ 2 ]

11 голосов
/ 06 марта 2012

Во второй строке, iki, у вас есть непечатный символ в конце. Когда я копирую и вставляю эту строку в vim, я вижу

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

Могу поспорить, что тайна будет раскрыта, как только вы удалите этого персонажа.

Если вам интересно, U + 200E - это знак слева направо .

2 голосов
/ 06 марта 2012

В конце есть непечатный символ, которого вы не видите.

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)
...