我想要做的是从给定的字符串中提取子字符串。
例如
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)的提取,但它只适用于艺术家
问题是如果歌曲包含额外的字符串,所包含的额外字符串也将被删除。
所以请大家,任何帮助或建议?
感谢
答案 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”字符串方法,它们可能会派上用场。祝你好运。