2

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

例如

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

我想删除多余的单词,例如

lyrics
2010
HQ
()
with

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

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

我一开始使用正则表达式但它没有用,我也使用了一些实体提取艺术家姓名(回声)但它只适用于艺术家

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

所以请大家,有什么帮助或建议吗?

谢谢

4

2 回答 2

2

Apache 的 StringUtils 可能是你的朋友:

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

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

于 2011-10-08T07:26:05.893 回答
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”区分大小写,如果您想忽略大小写,则必须编写自己的另一个字符串实用程序库。请注意可能对您派上用场的“toUpperCase”和“toLowerCase”字符串方法。祝你好运。

于 2011-10-08T07:39:52.673 回答