У меня странная проблема сравнения строк. Я отправляю строку на свой сервер (как байты, используя getBytes()
) от клиента. Я гарантировал, что кодирование на клиенте и сервере одинаково, запустив оба из них с -Dfile.encoding=UTF-8
.Как выполнить независимое от кодирования сравнение строк в Java?
Я заметил проблему, когда пытался выполнить команду valueOf
на строке, которую я получаю от клиента, чтобы преобразовать ее в перечисление. Когда я распечатываю строки, они выглядят точно так же. Но когда я выполняю compareTo
, я получаю ненулевой номер и equals
возвращает false
.
Я предполагаю, что это проблема кодирования. Я даже не уверен, но я все еще немного начинаю, когда речь идет о программировании на клиент-сервер с сокетами.
Это то, что я получаю:
Waiting for connections on port 9090
Connected to client: 127.0.0.1
received command: GetAllItems
The value is |GetAllItems| (from client)
The value is |GetAllItems| (from enum)
equals: false
Что я делаю неправильно?
UPDATE
Вот как я воссоздание строки из потока. Возможно, именно здесь я делаю что-то неправильно?
byte[] commandBytes = new byte[1024];
in.read(commandBytes); //in is a BufferedInputReader
String command = new String(commandBytes);
Можете ли вы запустить в отладчике, поставить точку перерыва при сравнении, а затем глубже взглянуть на строки с клиентом и перечислением? –
Как вы переписываете свою строку? –
@Rob - Мне бы хотелось, и это превращается в другой вопрос :) Это приложение для swing. У вас есть указатели на то, как я могу запустить отладчик? Я в основном работал над веб-приложениями, где я отлаживаю, подключаясь к tomcat. –