2015-02-08 27 views
0

我有适用于此的代码。但在我看来,这是非常令人厌恶的,需要清理。从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; 
} 
+0

什么是切除的准确标准? 'ios'之后的任何内容? – 2015-02-08 01:54:19

回答

0

如果你有,你想手头驱除掉文件名结尾的有限列表(如在你的榜样“〜ipad.png”,“@ 3x.png”等)我建议你从他们构造一个正则表达式(例如,包括“〜”,“@”),然后做一个String.split(regex)。这会给你一个String[](字符串数组),其索引0上的值将是你之后的字符串。

或者,如果您希望摆脱字符串的某个部分(例如“ios”)后的所有内容,则可以执行String.split("ios")。要将“ios”部分返回到结果中,可以简单地连接:String.split("ios")[0] + "ios"

+0

谢谢!我用你的建议,并找到一个单线解决方案!我感谢帮助! – tbcrawford 2015-02-08 18:22:21