我有适用于此的代码。但在我看来,这是非常令人厌恶的,需要清理。从ArrayList中的字符串中删除子串并放回列表中 - Java
问题出在这里: 我有一个ArrayList,里面有文件名,我试着迭代ArrayList并删除文件名的结尾。
实施例:
ArrayList<String> files
包含[am.sunrise.ios.png
,[email protected]
,[email protected]
,am.sunrise.ios~ipad.png
,[email protected]
]
为了除去该串中的结束部件我目前执行以下操作:
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("[email protected]"))
IBImages.set(image, IBImages.get(image).substring(0, IBImages.get(image).indexOf("[email protected]")));
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
,am.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;
}
什么是切除的准确标准? 'ios'之后的任何内容? – 2015-02-08 01:54:19