java - java中电影名称的字符串过滤

标签 java string

我必须从目录中获取所有电影名称的列表,但我只想要过滤后的名称而不是 额外信息通常附加在电影名称上。

例如。在 (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/

相关文章:

java - Spring Profile 包含 yaml 文件的问题

c - 为什么 scanf 不需要字符串的符号并且在 printf 中也能正常工作(在 C 中)?

php - php 中的正则表达式- 从字符串中捕获 9 种类型的数字

java - Android:在没有图形更改的情况下禁用复选框?

java - 如何在 Wicket 的 Ajax 响应中设置自定义 HTTP 响应 header ?

java - "getConstructor()"和 "getConstructor((Class<?>[]) null)"有什么区别?

javascript - React 中的 "Print"字符串逐个字母

java - android解析负数字符串

Java 字符串应该只包含字母和点

java - 单击提交按钮时在 hello world java servlet 中返回空白页