实体从String中提取和删除

时间:2011-10-08 07:21:59

标签: java string extraction text-extraction

我想要做的是从给定的字符串中提取子字符串。

例如

String str = "Eminem - Not Afraid with lyrics 2010";
String str2 = "Eminem - Not Afraid (HQ)";
String str3 = " Eminem Not afraid (Lyrics)";

我想删除像

这样的额外字词
lyrics
2010
HQ
()
with

如果我的哈希表包含所有“额外字符串”

从给定字符串中删除额外字符串的最佳方法是什么?

我最初使用的是正则表达式,但它没有用,我也使用了一些艺术家名称(echonest)的提取,但它只适用于艺术家

问题是如果歌曲包含额外的字符串,所包含的额外字符串也将被删除。

所以请大家,任何帮助或建议?

感谢

2 个答案:

答案 0 :(得分:2)

Apache的StringUtils可能是你的朋友:

http://commons.apache.org/lang/api-2.5/org/apache/commons/lang/StringUtils.html

它比JDK附带的String / String util更加通用。 (例如,它有一个“LastIndexOf”方法,可以帮助您在具有多个“with”的字符串中获取最后一个“with”。

答案 1 :(得分:1)

您可以提高性能,但这是一个让您入门的解决方案:

public static void main(String[] args) throws Exception {
    String str = "Eminem - Not Afraid with lyrics 2010";
    String str2 = "Eminem - Not Afraid (HQ)";
    String str3 = " Eminem Not afraid (Lyrics)";

    System.out.println(replace(str));
    System.out.println(replace(str2));
    System.out.println(replace(str3));
}



private static String replace(String string) {
    List<String> extraList = Arrays.asList(new String[] { "lyrics", "2010", "HQ", "(", ")", "with" });
    for (String extra : extraList) {
        int index = string.indexOf(extra);
        while (index >= 0) {
            string = string.substring(0, index) + string.substring(index + extra.length(), string.length());
            index = string.indexOf(extra);
        }
    }

    return string;
}

请注意,“indexOf”区分大小写,如果要忽略大小写,则必须编写自己的另一个String实用程序库。请注意“toUpperCase”和“toLowerCase”字符串方法,它们可能会派上用场。祝你好运。