我有适用于此的代码。但在我看来非常恶心,需要清理干净。
问题在于: 我有一个带有文件名的ArrayList,我试图遍历ArrayList并删除文件名的结尾。
示例:
ArrayList<String> files
包含[am.sunrise.ios.png
,am.sunrise.ios@2x.png
,am.sunrise.ios@3x.png
,am.sunrise.ios~ipad.png
,am.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.ios
,am.sunrise.ios
,am.sunrise.ios
,am.sunrise.ios
,{{1} }]。
我计划将ArrayList转换为Set(我相信Java具有这种能力,对Java来说还是新手),然后转换回来去除列表中的重复项,就像在Python中一样。
编辑: 如果有人来寻找这样的解决方案,我发现了一个适合我的衬垫(for循环中的一个衬垫)。它与上面的内容完全相同,甚至将它放回到ArrayList中。
am.sunrise.ios
答案 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")
。