我必须从目录中获取所有电影名称的列表,但我只想要过滤后的名称而不是 额外信息通常附加在电影名称上。
例如。在 (Wall-E [DVDrip] [双音频] [Eng-Hindi]-$am3e) 这个字符串中,我只想返回字符串 (Wall -E) 我想从电影名称字符串中过滤掉所有类似的不相关信息。
有人可以建议我如何在 JAVA 中实现这一目标吗? 我能想到的唯一方法是暴力替换所有不必要的字符串 代码片段是:
for(String list1 : list) {
if(list1.contains("DvDrip[Eng]-FXG"))
list1.replaceAll("DvDrip[Eng]-FXG","");
else if(list1.contains("Blu-Ray x264 [Dual-Audio][Hindi-English]"))
list1.replaceAll("Blu-Ray x264 [Dual-Audio][Hindi-English]","");
else if(list1.cotains("10n80p.BRRip.x264.AAC-ETRG"))
list1.replaceAll("1080p.BRRip.x264.AAC-ETRG","");
}
谁能告诉我更好的方法吗?
最佳答案
更简洁的方法是维护要替换/删除的所有目标的集合,然后使用 String#replaceAll
进行替换:
List<String> targets = Arrays.asList("DvDrip[Eng]-FXG", "Blu-Ray x264 [Dual-Audio][Hindi-English]", "10n80p.BRRip.x264.AAC-ETRG");
targets = targets.stream().map(x -> Pattern.quote(x)).collect(Collectors.toList());
String regex = "(?<!\\S)(?:" + String.join("|", targets) + ")(?!\\S)";
String input = "DvDrip[Eng]-FXG Hello World Blu-Ray x264 [Dual-Audio][Hindi-English] Goodbye";
System.out.println(input);
input = input.replaceAll(regex, "");
System.out.println(input);
打印:
DvDrip[Eng]-FXG Hello World Blu-Ray x264 [Dual-Audio][Hindi-English] Goodbye
Hello World Goodbye
乍一看,上面的代码片段可能比您现在的代码片段更冗长。但请记住,它适用于任意数量的替换,而您当前的方法只会继续需要更多代码。
关于java - java中电影名称的字符串过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59316721/