2011-12-15 2 views
2

Извините, если это глупый вопрос. Мне нужно сравнить имя с тремя словами, разделенными одним пробелом. Если имя равно null или «Это Android», я бы сделал что-то, иначе я сделаю что-то еще. Например, имеет ли следующий код право на это сравнение?сравнение со строками, имеющими пробел

if((name==null)||(name.equalsIgnoreCase("This is Android"))) 
    { 
     //start activity 1 
     } 
    else 
     { 
     //start activity 2 
     } 
+0

Пожалуйста, включите немного больше информации о 'name' –

+0

«Три слова, разделенные одним пробелом» как? –

+0

Извините, это уже строка. Я отредактировал мой вопрос.thanks –

ответ

3

Вы должны проверить, если name является недействительным, прежде чем сделать это, в противном случае она хорошо выглядит. (За исключением, она должна быть if вместо If):

//either 
if(name != null) { 
    if(name.equalsIgnoreCase("This is Android") { 

    } 
} 

//or 
if("This is Android ".equalsIgnoreCase(name)) { 

Update:

При сравнении строк, отсчитывать пробелы. Итак, в основном «Hello world» и «Hello world» не равны.

Вам необходимо использовать метод .trim(), чтобы игнорировать окружающие пробелы.

name = name.trim(); //since strings are immutable you need to assign return value to name 
if("This is Android".equalsIgnoreCase(name)) { 
+0

Почему вы идете toString в строковом литерале? Кроме того, зачем инвертировать заказ? – Miquel

+0

@Miquel: Спасибо, что заметили. Не обращал внимания при копировании с ОП. Если вы инвертируете, если нулевая проверка не требуется. –

+0

@gurung - если нет необходимости, вам не нужно проверять значение null. Это покрывается вызовом equalsIgnoreCase. –

6

«Это Android» отличается от «Это Android» и equalsIgnoreCase вернет ложь. Вы можете использовать trim() для удаления пробелов и начала или конца String.

Надеюсь, это поможет!

+0

Фактически «Это Android» в коде. это то, что я имел в виду ... снова отредактировал мой вопрос. –

+0

Тогда да. Сравнение в порядке. –

1

Всегда держать постоянную строку на левой стороне в равных, это не гарантирует отсутствие NPE:

так:

if ("This is Android ".equalsIgnoreCase(str1)) { 
    // start activity 1 
} else { 
    // start activity 2 
} 

В случае, если вы не хотите, пространство затем добавить trim():

if ("This is Android ".trim().equalsIgnoreCase(str1)) { 
    // start activity 1 
} else { 
    // start activity 2 
} 
+1

Какой смысл обрезать строковый литерал? – viktor

1
if("This is Android".equalsIgnoreCase(name)) 
    // start activity 1 
} else { 
    // start activity 2 
} 

или пуленепробиваемый (в случае, если пользователь вставил значение с нежелательными пробелами в конце строка)

if(name != null && "This is Android".equalsIgnoreCase(name.trim())) 
    // start activity 1 
} else { 
    // start activity 2 
} 
Смежные вопросы