По сути, у меня есть две строки. Я прочитал первое из файла Excel, а второе — из имени другого файла. Метод хеш-кода, который я перезаписал, возвращает разные значения для обеих строк, хотя их содержимое одинаково.
Итак, у меня проблема в том, что мой HashMap не работает должным образом, потому что я использую рассматриваемая строка в качестве ключа
Я обнаружил, что кодировка другая. Я также могу сказать это по «кодировщику».
Отладка IntelliJ
Отладка IntelliJ 2
Моя идея заключалась в том, чтобы вручную настроить затронутые атрибуты. для всех объектов. Но это не помогло.
Код: Выделить всё
public void setName(String name) {
this.name = new String(name.getBytes(), Charset.forName("UTF-8"));
}
Код: Выделить всё
org.apache.tika
tika-core
0.7
org.apache.tika
tika-parsers
0.7
Код: Выделить всё
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Driver other = (Driver) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
if (surname == null) {
if (other.surname != null)
return false;
} else if (!surname.equals(other.surname))
return false;
return true;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result
+ ((name == null) ? 0 : name.hashCode());
result = prime * result
+ ((surname == null) ? 0 : surname.hashCode());
return result;
}
public int compareTo(Driver o) {
String d1Name = replaceUmlaute(o.getName());
String d2Name = replaceUmlaute(this.getName());
String d1Surname = replaceUmlaute(o.getSurname());
String d2Surname = replaceUmlaute(this.getSurname());
if (d1Name.compareToIgnoreCase(d2Name) == 0 && d1Surname.compareToIgnoreCase(d2Surname) == 0) {
return 0;
} else if(o.hashCode() == this.hashCode()){
return 0;
}
return -1;
}
private static String replaceUmlaute(String output) {
String newString = output.replace("\u00fc", "ue")
.replace("\u00f6", "oe")
.replace("\u00e4", "ae")
.replace("\u00df", "ss")
.replaceAll("\u00dc(?=[a-z\u00e4\u00f6\u00fc\u00df ])", "Ue")
.replaceAll("\u00d6(?=[a-z\u00e4\u00f6\u00fc\u00df ])", "Oe")
.replaceAll("\u00c4(?=[a-z\u00e4\u00f6\u00fc\u00df ])", "Ae")
.replace("\u00dc", "UE")
.replace("\u00d6", "OE")
.replace("\u00c4", "AE");
return newString;
}
Есть ли у кого-нибудь идеи?
Подробнее здесь: https://stackoverflow.com/questions/785 ... -coder-1-0