从 ArrayList 中的字符串中删除子字符串并放回列表中 - Java

Remove substring from string in ArrayList and put back into list - Java

我有适用于此的代码。但在我看来这是非常恶心的,需要清理。

问题来了: 我有一个包含文件名的 ArrayList,我正在尝试遍历 ArrayList 并删除文件名的结尾。

示例:

ArrayList<String> files 包含 [am.sunrise.ios.pngam.sunrise.ios@2x.pngam.sunrise.ios@3x.pngam.sunrise.ios~ipad.pngam.sunrise.ios~ipad@2x.png]

为了删除字符串中的结尾部分,我目前正在执行以下操作:

private static ArrayList<String> removeTrailingElements(ArrayList<String> IBImages) {
    for (int image = 0; image < IBImages.size(); image++) {
        if (IBImages.get(image).endsWith("~ipad.png"))
            IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf("~ipad.png")));
        if (IBImages.get(image).endsWith("~ipad@2x.png"))
            IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf("~ipad@2x.png")));
        if (IBImages.get(image).endsWith("@2x~ipad.png"))
            IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf("@2x~ipad.png")));
        if (IBImages.get(image).endsWith("@2x.png"))
            IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf("@2x.png")));
        if (IBImages.get(image).endsWith("@3x.png"))
            IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf("@3x.png")));
        if (IBImages.get(image).endsWith(".png"))
            IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf(".png")));
    }
    return IBImages;
}

显然是一些糟糕的代码。我想看看是否有人有更简洁的方法让结果 ArrayList 包含 [am.sunrise.iosam.sunrise.iosam.sunrise.iosam.sunrise.iosam.sunrise.ios] .

我计划将 ArrayList 转换为 Set(我相信 Java 具有这种能力,对 Java 来说还是个新手)然后转换回来以消除列表中的重复项,就像你会在 Python.

编辑: 如果有人来寻找这样的解决方案,我找到了一个适合我的衬里(for 循环中的一个衬里)。它做的事情和上面一样,甚至把它放回 ArrayList 中。

private static ArrayList<String> removeTrailingElements(ArrayList<String> IBImages) {
    for (int image = 0; image < IBImages.size(); image++) {
        IBImages.set(image, IBImages.get(image).split("~")[0].split("@")[0].split(".png")[0]);
    }
    return IBImages;
}

如果您手头有一个有限的文件名结尾列表(例如您的示例中的“~ipad.png”、“@3x.png”等。 ),我建议你从它们构造一个正则表达式(例如,包括“~”、“@”),然后做一个 String.split(regex)。这为您提供了一个 String[](字符串数组),其中索引 0 处的值将是您之后的字符串。

或者,如果您想删除字符串特定部分之后的所有内容(例如,"ios"),您可以执行 String.split("ios")。要将 "ios" 部分返回到结果中,您可以简单地连接:String.split("ios")[0] + "ios".