Beim Vergleichen von Strings mit equal oder Enum Parsen mit „valueOf“ gibt es keinen match, obwohl der String augenscheinlich identisch ist – Dieses Problem wird in diesem Beitrag erläutert:
Beim Parsen von CSV Dateien stößt man ab und zu auf Probleme mit der Encodierung der zu parsenden Datei.
Im konkreten Fall gestaltete sich das Problem als herausfordernd, weil auf den ersten Blick keine Ursache für das Problem erkennbar war.
Die geparste Variable nennt sich „rowTypeString“ und hat im Debugger den Inhalt „RH“
Im Quelltext wird jedoch die Variable über ein Enum mit der „valueOf()“-Funktion geparst und einem eindeutigen Typ zugewiesen. Diese lief jedoch immer auf eine IllegalArgumentException hinaus.
Die Analyse des String ergab dann doch noch interessante Details:
- Der String hat eine Länge von 3 Zeichen (auch wenn das dritte unsichtbar ist)
- Ein Character Array gab auch interessante Details zurück:
- Die Methode rowTypeString.getBytes() gibt zahlreiche Bytes zurück, welche auf das dritte Zeichen hindeuten:
[-17, -69, -65, 82, 72] - Eigentlich dürfte das ByteArray nur [82,72] lauten für den String „RH“
Die Lösung konnte sich dann doch gut sehen lassen. Es werden alle „nicht druckbaren Zeichen“ entfernt mit dem nachfolgenden regulären Ausdruck:
stringValue.replaceAll("[^\\p{Graph}\n\r\t ]", "");
Ich danke an dieser Stelle dem Verfasser einer Antwort in StackOverFlow