сравнение строк - JAVA - PullRequest
       2

сравнение строк - JAVA

0 голосов
/ 16 марта 2012

Хорошо, я знаю, что есть миллионы ответов на этот вопрос «как сравнить строки», но я убедился, что исследовал столько, сколько могу, чтобы решить мою проблему, но я не могу найти ответ ...

Я делаю сетевой чат-сервер и клиент в Java, который работает по протоколу udp, используя DatagramSockets (даже если поток через tcp будет иметь больше смысла).Я хочу иметь способ выхода из программы чата с обеих сторон, когда пользователь набирает exit.Чтобы получить пользовательский ввод, я использую Scanner, который я объявил в методе с именем getMessage в классе getter.getMessage.Вот код, над которым я сейчас работаю:

getter.getMessage();
String pTest = getter.smessage;
if(pTest.equals("exit")) {
  System.out.println("System going offline");
  getter.isOn = false;
}

Это игнорируется каждый раз в цикле while, даже когда пользовательский ввод завершается.Я также попытался:

if(getter.message.toLowerCase().Equals("exit") {
  //blah
}

Я изначально пытался не помещать getter.message в String pTest, но он просто не хочет работать.Что я тут не так делаю?

Ответы [ 3 ]

3 голосов
/ 16 марта 2012

Попробуйте это:

if ("exit".equalsIgnoreCase(getter.message.trim())) {
    . . .
}

EDIT

Вы упомянули в комментарии, что когда вы ожидаете "exit", вы получаете 11 символов (10 после вызова trim()). Это говорит о том, что существует несоответствие кодировки с данными. Возможно, сервер отправляет данные UTF-16 с меткой порядка байтов в начале. (Это объясняет количество байтов.) Если вы затем читаете его, используя кодировку платформы по умолчанию (обычно ISO-8859-1 или UTF-8), вы конвертируете каждый байт в символ, и он никогда не будет совпадать с "exit" , Вам нужно, чтобы обе стороны кодировки совпадали.

Как только вы узнаете кодировку, используемую для отправки данных, создайте Scanner с помощью конструктора, который принимает кодировку символов. Например, это может быть:

Scanner scanner = new Scanner(inputStream, "UTF-16");
0 голосов
/ 16 марта 2012

Я предполагаю, что getter.message что-то возвращает. Вы пытались проверить "длину" строки, возвращенной из getter.message?

Я никогда не пробовал ничего подобного, но столкнулся с подобной проблемой в AJAX. Длина строки, возвращаемой с сервера, была больше, чем строка, которую я сравнивал. И мне пришлось удалить ненужные пробелы перед сравнением.

0 голосов
/ 16 марта 2012

Это может быть проблема белых / пустых мест. попробуйте следующий код,

if (getter.message.toLowerCase().trim().Equals("exit") )
{
   //blah
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...