为什么String.equals(“word”)不适合我?

时间:2015-04-13 21:18:58

标签: java string

正常代码在

下面工作
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

任何想法为什么?

3 个答案:

答案 0 :(得分:1)

请注意,这假设您的输入实际上是"small""medium""large",并且您的枚举是:

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

如果是这种情况,您可以这样做:

final ShipSize size = ShipSize.valueOf(shipSize.toUpperCase());
如果常量不存在,

.valueOf()将抛出IllegalArgumentException,因此如果风险存在,您应该捕获并适当恢复。

答案 1 :(得分:1)

等于区分大小写,具体取决于您的输入,因此您可能需要使用.equalsIgnoreCase()代替.equals()

除此之外,你没有做过任何“错误”。您需要准确指定输入内容以获取更多详细信息。

答案 2 :(得分:1)

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

假设ShipSize是枚举,那么您可以使用枚举的.name来获取String。此外,在比较时将常量放在第一位,以避免可能的空指针异常。

编辑:改为equalsIgnoreCase。