使用string.equals方法缩短if()

时间:2015-05-28 14:31:15

标签: java if-statement

有没有办法缩短这个if()声明?为了避免以某种方式重复string.equals()

if (extension.equals("jpg") || extension.equals("JPG") || extension.equals("png") || extension.equals("PNG") || extension.equals("bmp") || extension.equals("BMP") || extension.equals("jpeg") || extension.equals("JPEG"))
{
    tmp.setIcon(new ImageIcon(getClass().getResource("/menage/Resources/imageIco.png")));
}

看起来与此相似:

if (extension.equals(("jpg")||("JPG")||("png")||("PNG")||("bmp")||("BMP")||("jpeg")||("JPEG")))
{
    tmp.setIcon(new ImageIcon(getClass().getResource("/menage/Resources/imageIco.png"));)
}

我知道这个问题看起来有些奇怪,但if()这样长的条件清单并不清楚,需要大量写作。

8 个答案:

答案 0 :(得分:5)

首先将equals(...)更改为equalsIgnoreCase(...)

其他选项,使用您的图片扩展名创建一个小写字符串的HashSet(或大写字母,如果需要),并查看它是否包含您感兴趣的字符串,更改为小写:

if (imageExtSet.contains(myExtension.toLowerCase()) {

}

答案 1 :(得分:4)

以下是预定义图像类型的简短版本:

Set<String> imgTypes = new HashSet<>() {{ 
  add("jpg");   add("JPG");
  add("png");   add("PNG");
  add("bmp");   add("BMP");
  add("jpeg");  add("JPEG");
}};

public boolean isImgType(String type) {
  return imgTypes.contains(type);
}

答案 2 :(得分:3)

您可以将所有值保留在列表中,然后询问是否包含。如果它只是一个班轮(您不需要在其他任何地方询问这种情况),您可以这样做:

if (Arrays.asList("jpg", "JPG", "png", "PNG", "bmp", "BMP", "jpeg", "JPEG").contains(extension))

您当然可以将列表保存为对象,然后在需要请求此条件的任何地方引用它。

答案 3 :(得分:2)

使用HashSet 喜欢这个

Set<String> extSet= new HashSet<String>();
// Add All in Lower case .. to save your efforts

extSet.add("jpg");
extSet.add("png");

//...etc etc

并检查它是否出现在Set

if(extSet.contains(extension==null?null:extension.toLowerCase()))
{
/// True
}
else
{
// False
}

答案 4 :(得分:0)

您可以做的一件事就是将字符串转换为小写:

String ext = extension.toLowerCase();

现在您已将声明缩短为:

if (ext.equals("jpg") || ext.equals("png") || ext.equals("bmp") || ext.equals("jpeg"))

答案 5 :(得分:0)

if (Arrays.asList("jpg", "jpeg", "png", "bmp").contains(extension.toLowerCase))

答案 6 :(得分:0)

添加一些方法......

private static boolean isJpeg(String ext) {
    return java.util.Arrays.asList("jpg", "jpeg").contains(ext.toLowerCase());
}

private static boolean isPng(String ext) {
    return "png".equalsIgnoreCase(ext);
}

private static boolean isBmp(String ext) {
    return "bmp".equalsIgnoreCase(ext);
}

并将其更改为......

else if (isJpeg(extension) || isPng(extension) || isBmp(extension))
            {
                tmp.setIcon(new ImageIcon(getClass().getResource("/menage/Resources/imageIco.png")));
            }

如果扩展名为null,isJpeg将抛出NullPointerException,因此通过添加extension != null || ...或其他内容确保它不为空。

上述情况与您的具体情况略有不同,因为它允许JpEg和所有其他混合大写字母漏掉。如果您不想这样,请使用这些。另外,如果扩展名为NullPointerException,则下面的附加优势是永不投掷null

private static boolean isJpeg(String ext) {
    return java.util.Arrays.asList("jpg", "JPG", "jpeg", "JPEG").contains(ext);
}

private static boolean isPng(String ext) {
    return java.util.Arrays.asList("png", "PNG").contains(ext);
}

private static boolean isBmp(String ext) {
    return java.util.Arrays.asList("bmp", "BMP").contains(ext);
}

答案 7 :(得分:0)

其他答案提供了许多好的低级想法,但这里的基本原则是防止代码重用。

如果您不止一次进行此测试,请创建一个为您进行测试的方法:

boolean isValidImageExtenstion(String extension) {
    return (extension.equals("jpg") || extension.equals("JPG") ||
            extension.equals("png") || extension.equals("PNG") ||
            extension.equals("bmp") || extension.equals("BMP") ||
            extension.equals("jpeg") || extension.equals("JPEG"));
}

随时调用方法。如果你愿意,你可以使用方法中其他答案中描述的方法之一(并且'忽略大小写'的建议当然是值得的)但是其余的变得不那么重要,因为你已经阻止了代码的重复。作为奖励,如果您决定要支持gif扩展,则只需在一个地方进行更改。

这种方法优于其他方法的优点在于它是自我记录的。这个方法的作用非常明显,其他一些答案也很模糊。

如果您只是这样做一次,并且不想再这样做,那么您已经创建了工作代码,因此不要浪费您的时间来修改工作代码