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

时间:2015-02-08 01:46:21

标签: java string arraylist

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

问题在于:    我有一个带有文件名的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.ios,{{1} }]。

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

编辑: 如果有人来寻找这样的解决方案,我发现了一个适合我的衬垫(for循环中的一个衬垫)。它与上面的内容完全相同,甚至将它放回到ArrayList中。

am.sunrise.ios

1 个答案:

答案 0 :(得分:0)

如果你有一个有限的文件名结尾列表,你想要摆脱它(例如你的例子&#34; ~ipad.png&#34;,&#34; @ 3x.png&#34等等,我建议你从它们构建一个正则表达式(例如,包括&#34;〜&#34;,&#34; @&#34;),然后做一个{{1 }}。这会给你一个String.split(regex)(字符串数组),其索引String[]的值将是你之后的字符串。

或者,如果你想在字符串的某个部分之后删除所有内容(例如,&#34; ios&#34;),你可以执行0。获得&#34; ios&#34;回到结果中,您可以简单地连接:String.split("ios")