Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中电影名称的字符串过滤_Java_String - Fatal编程技术网

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

java中电影名称的字符串过滤,java,string,Java,String,我必须从一个目录中获取所有电影名称的列表,但我只需要筛选出的名称,而不是 附加信息通常附加到电影名称 例如,在(Wall-E[DVDrip][Dual Audio][Eng Hindi]-$am3e)这个字符串中,我只希望返回字符串(Wall-E),我希望从电影名称字符串中过滤所有类似的无关信息 有谁能建议我如何用JAVA实现这一点。 我能想到的唯一方法是用蛮力替换所有不必要的字符串 代码片段是: for(String list1 : list) { if(list1

我必须从一个目录中获取所有电影名称的列表,但我只需要筛选出的名称,而不是 附加信息通常附加到电影名称

例如,在(Wall-E[DVDrip][Dual Audio][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);

乍一看,上面的代码片段可能比您现在看到的更详细。但请记住,它适用于任意数量的替换,而您当前的方法只需要更多的代码。

一种更干净的方法是维护所有要替换/删除的目标的集合,然后使用
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);

乍一看,上面的代码片段可能比您现在看到的更详细。但请记住,它适用于任意数量的替换,而您当前的方法只需要更多的代码。

假设每个列表元素使用相同的模式,即以一个左括号开始(),在电影名称后有一个空格,后跟字符
[
,那么我建议使用以下利用java正则表达式的代码

Pattern-pttrn=Pattern.compile(“^\\(\\S+.*?\ \ \ \[”);
Matcher mtchr=pttrn.Matcher(((Wall-E[DVDrip][Dual Audio][Eng Hindi]-$am3e)”;
if(mtchr.find()){
系统输出打印LN(mtchr组(1));
}
请注意,上述代码使用您在问题中发布的示例输入。
mtchr.group(1)
返回的
字符串是

瓦力


假设每个列表元素使用相同的模式,即以一个左括号开始
),在电影名称后有一个空格,后跟字符
[
,那么我建议使用以下使用java正则表达式的代码

Pattern-pttrn=Pattern.compile(“^\\(\\S+.*?\ \ \ \[”);
Matcher mtchr=pttrn.Matcher(((Wall-E[DVDrip][Dual Audio][Eng Hindi]-$am3e)”;
if(mtchr.find()){
系统输出打印LN(mtchr组(1));
}
请注意,上述代码使用您在问题中发布的示例输入。
mtchr.group(1)
返回的
字符串是

瓦力


a) 也许你应该使用
replace
,因为
replaceAll
接受regex作为它的输入
[Eng]
会混淆它。b)字符串是不可变的,而
replace
方法重新运行更改过的字符串。c)检查contains条件是无意义的。只需替换即可。d)替换小字符串会更成功,比如“(e)考虑使用正则表达式来消除所有的“…”项目。然后在问题中说明电影名称是否包含空格?如果不是,我建议将字符串按空格分割,并使用结果开始数组中的第一个字符串。a)也许您应该使用
replace
as
replaceAll
接受正则表达式作为其输入
[Eng]会混淆它。b)字符串是不可变的,而<代码>替换< /代码>方法重新调整已更改的字符串。c)检查包含条件是毫无意义的。只需替换.d),您将有更多的替代小字符串的成功,例如“[Eng]”考虑使用正则表达式来除掉所有的“…”。项目。然后在您的问题中说明电影名称是否包含空格?如果不是,我建议将字符串按空格分割,并使用结果数组中的第一个字符串。