从 ArrayList 中的字符串中删除子字符串并放回列表中 - Java
Remove substring from string in ArrayList and put back into list - Java
我有适用于此的代码。但在我看来这是非常恶心的,需要清理。
问题来了:
我有一个包含文件名的 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
、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;
}
如果您手头有一个有限的文件名结尾列表(例如您的示例中的“~ipad.png”、“@3x.png”等。 ),我建议你从它们构造一个正则表达式(例如,包括“~”、“@”),然后做一个 String.split(regex)
。这为您提供了一个 String[]
(字符串数组),其中索引 0
处的值将是您之后的字符串。
或者,如果您想删除字符串特定部分之后的所有内容(例如,"ios"),您可以执行 String.split("ios")
。要将 "ios" 部分返回到结果中,您可以简单地连接:String.split("ios")[0] + "ios"
.
我有适用于此的代码。但在我看来这是非常恶心的,需要清理。
问题来了: 我有一个包含文件名的 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
、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;
}
如果您手头有一个有限的文件名结尾列表(例如您的示例中的“~ipad.png”、“@3x.png”等。 ),我建议你从它们构造一个正则表达式(例如,包括“~”、“@”),然后做一个 String.split(regex)
。这为您提供了一个 String[]
(字符串数组),其中索引 0
处的值将是您之后的字符串。
或者,如果您想删除字符串特定部分之后的所有内容(例如,"ios"),您可以执行 String.split("ios")
。要将 "ios" 部分返回到结果中,您可以简单地连接:String.split("ios")[0] + "ios"
.