2015-04-13 2 views
-1

нормальный код работает подПочему String.equals («word») не работает для меня?

ShipSize size = shipSize.startsWith("s") ? ShipSize.SMALL: 
    (shipSize.startsWith("m") ? ShipSize.MEDIUM: ShipSize.LARGE); // get ship size 

Это правильный способ изменить код, чтобы строка равна слово. Кажется, я не работаю для меня.

ShipSize size = shipSize.equals("small") ? ShipSize.SMALL: 
    (shipSize.equals("medium") ? ShipSize.MEDIUM: ShipSize.LARGE); // get ship size 

Любые идеи, почему?

+2

Используйте «переключатель». Еще лучше, используйте 'enum' как предназначенный. –

+1

Что вы имеете в виду, похоже, не работает? – zubergu

+0

См. Мой ответ, но здесь неясно, что вы делаете. Мой ответ предполагает, что входная строка нечувствительна к регистру, такая же, как константа перечисления – fge

ответ

1

Обратите внимание, что это предполагает, что ваши входы фактически "small", "medium" или "large" и что ваше перечисление:

public enum ShipSize 
{ 
    SMALL, 
    MEDIUM, 
    LARGE, 
    ; 
} 

Если это так, то вы можете просто сделать:

final ShipSize size = ShipSize.valueOf(shipSize.toUpperCase()); 

.valueOf() будет генерировать IllegalArgumentException, если константа не существует, поэтому, если существует риск, вы должны поймать это и восстановить соответствующим образом.

+0

Почему downvote? – fge

+0

@zubergu Я предлагаю вам снова прочитать вопрос ... Вы действительно считаете, что «supersized» приведет к 'ShipSize.SMALL'? – fge

+0

@zubergu это не мешает вам пытаться и гадать, чего хочет пользователь; опыт, как вы выразились, это меч с двойным острием. Вы в конечном итоге интуитивно понимаете, в чем проблема, и ваша «nitpickiness» предлагает вам запросить более подробную информацию в комментариях, вместо этого, где прямой ответ может быть просто тем, что просит OP. Ohwell ... – fge

1

Равно чувствителен к регистру, в зависимости от вашего входа, так что вам, возможно, придется использовать .equalsIgnoreCase() вместо .equals()

Кроме этого, вы не сделали ничего «плохого». Вам нужно будет точно указать, что ваш ввод для более подробной информации.

1
ShipSize size = "small".equalsIgnoreCase(shipSize.name) ? ShipSize.SMALL: ("medium".equalsIgnoreCase(shipSize.name) ? ShipSize.MEDIUM: ShipSize.LARGE); // get ship size 

Предполагая, что ShipSize является перечислением, вы можете использовать имя переименования для получения строки. Кроме того, сначала поместите константы, сравнивая с тем, чтобы избежать возможных исключений нулевого указателя.

EDIT: изменено на equalsIgnoreCase.

Смежные вопросы