Java: String.equalsIgnoreCase(. . .) не работает

#java

#java

Вопрос:

Я разрабатываю небольшое приложение на Java. Следующее условие if никогда не становится истинным, знает ли какое-либо тело действительную причину?

 public int foo()
{

String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
    return 5;
else
    return 6;
}
  

Он всегда возвращает 6. Я запустил ее в режиме отладки и увидел, что обе строки содержат одинаковое значение.
Я также попытался поменять местами позиции обеих строк, например:

 MyCustomObject.sTitle.equalsIgnoreCase(sTitle)
  

но это тоже не сработало.

Комментарии:

1. Опубликуйте код, который присваивает значения MyCustomObject.sTitle .

2. Вы должны опубликовать здесь код, который вы действительно пробовали и который не работает. Это даже не будет скомпилировано. Добавьте присваивание для MyCustomObject.sTitle в то же место, что и sTitle , и посмотрите, не работает ли оно по-прежнему.

3. Попробуйте вставить это перед своим if и сообщите нам результат: system.out.println(sTitle «~» MyCustomObject. sTitle «=» sTitle.equalsIgnoreCase(MyCustomObject. Стиль));

4. Попробуйте обрезать каждую строку, возможно, у вас есть лишние пробелы в начале или конце.

5. Хотя это приятная мечта, что обе строки имеют одинаковое значение, похоже, что Java с вами не согласна. рассмотрим детали. Если MyCustomObject. В конце строки есть null, тогда это никоим образом не то же самое, что «title», потому что «title» != «title 0»

Ответ №1:

Фактическая причина заключается в том, что MyCustomObject.sTitle не имеет значения «title» или каких-либо вариантов регистра.

Проверьте, где и когда назначена эта переменная.

Комментарии:

1. Я четко написал, что обе строки имеют одинаковое значение. Нет необходимости проверять, откуда берется это значение, я просто ставлю точку останова над условием if и навожу указатель мыши на обе строки и обнаружил, что обе имеют одинаковые значения даже с одинаковым регистром

2. @Jame либо значения отличаются, либо вы публикуете не совсем то, что делаете.

3. @Jame можете ли вы скопировать / вставить значение, которое вы видите в отладчике? Это может выглядеть как ‘title’, но на самом деле это не так.

4. @srkavin: Я тоже уже проверил эту вещь, ничего подобного нет

5. @Jonathon: Я не могу вставить фактический код из-за проблем с безопасностью, извините за это. Но я пытаюсь разобраться в проблеме, в начале строки есть пробел. Извините за отрицательный голос, я буду голосовать за это сейчас спасибо

Ответ №2:

Я предполагаю, что MyCustomObject.sTitle это тоже строка.

Моей первой попыткой отладки было бы добавить следующую строку перед проверкой равенства: System.out.println("*" MyCustomObject.sTitle "*"); и проверить наличие пробелов.

Ответ №3:

Попробуйте добавить этот код в метод foo:

 if (sTitle.length() != MyCustomObject.sTitle.length())
{
  System.out.println("I hate the truth");
}
else
{
  System.out.println("The mystery remains!");
}
  

Ответ №4:

Метод equalsIgnoreCase равного значения

Сравнивает эту строку с другой строкой, игнорируя соображения регистра. Две строки считаются равными, игнорируя регистр, если они имеют одинаковую длину, и соответствующие символы в двух строках равны, игнорируя регистр. Два символа c1 и c2 считаются одинаковыми, игнорируя регистр, если хотя бы один из следующих символов верен:

Два символа одинаковы (по сравнению с помощью оператора == ). Применение метода Character.toUpperCase(char) к каждому символу приводит к одному и тому же результату. Применяем метод Character.Добавление нижнего регистра (char) к каждому символу приводит к одному и тому же результату.

На основе приведенного выше значения MyCustomObject.Шаблон не соответствует ни одному из вышеуказанных критериев.

Ответ №5:

как и предыдущие авторы, был написан MyCustomObject.sTitle не возвращает ни одного варианта «title». Вы могли бы попробовать запустить этот фрагмент кода, и вы сможете сами доказать, что это не метод equalsIgnoreCase, который не работает.

 public static void main(String[] args) {
    System.out.println(foo());
}

public static int foo()
{

String sTitle = "title";
if (sTitle.equalsIgnoreCase(MyCustomObject.sTitle))
    return 5;
else
    return 6;
}

public static class MyCustomObject {
    public static String sTitle = "TITLE";
}