有没有办法缩短这个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()
这样长的条件清单并不清楚,需要大量写作。
答案 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扩展,则只需在一个地方进行更改。
这种方法优于其他方法的优点在于它是自我记录的。这个方法的作用非常明显,其他一些答案也很模糊。
如果您只是这样做一次,并且不想再这样做,那么您已经创建了工作代码,因此不要浪费您的时间来修改工作代码。