Java 从字符串中提取和删除实体
我想做的是从给定字符串中提取子字符串 比如说Java 从字符串中提取和删除实体,java,string,extraction,text-extraction,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 如果我有一个包含所有“额外字符串”的哈希表 从给定字符串中删除额外字符串的最佳方法是什么 我一开始使
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),但它只适用于艺术家
问题是,如果歌曲包含额外的字符串,那么包含的额外字符串也将被删除
伙计们,有什么帮助或建议吗
谢谢Apache的StringUtils可能是您的朋友:
它比JDK附带的String/String-util更通用。(例如,它有一个“LastIndexOf”方法,可以帮助您获取具有多个“with”的字符串中的最后一个“with”)。您可以提高性能,但这里有一个解决方案可以帮助您开始:
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;
}
publicstaticvoidmain(字符串[]args)引发异常{
String str=“Eminem-不害怕歌词2010”;
String str2=“Eminem-无所畏惧(HQ)”;
String str3=“Eminem无所畏惧(歌词)”;
系统输出打印LN(替换(str));
系统输出打印LN(替换(str2));
系统输出打印LN(替换(str3));
}
私有静态字符串替换(字符串){
List extraList=Arrays.asList(新字符串[]{“歌词”、“2010”、“HQ”、“带“}”);
用于(字符串附加:附加列表){
int index=string.indexOf(额外);
而(索引>=0){
string=string.substring(0,index)+string.substring(index+extra.length(),string.length());
index=string.indexOf(额外);
}
}
返回字符串;
}
请注意,“indexOf”是区分大小写的,如果要忽略大小写,则必须编写自己的另一个字符串实用程序库。请注意“toUpperCase”和“toLowerCase”字符串方法,它们可能对您很方便。祝你好运。为什么你不能在一个循环中尝试str=str.replace(badStr,“”)来替换所有的坏str?如果我在badStr中有with,而歌曲是“with you”:SThanks,但是如果我有像克里斯·布朗这样的歌曲,你认为我应该怎么做呢?再次感谢你的帮助:)这个解决方案的问题是它仍然不能满足歌曲标题中“歌词”这个词的情况,OP特别希望避免删除这个词。任何操纵字符串的方法都必须接受标题,以确保它不会从中删除单词。Yes标记是正确的。您需要确定实际的标题,这在现实世界场景中可能会非常困难。你到底想做什么?你是不是想让每首歌都贴上“阿姆-不怕”的标签?或者你是在试图以某种方式确定“Eminem-无所畏惧”、“Eminem无所畏惧”和“Eminem,无所畏惧”都是同一个标题,而不涉及这些部分?你有所有合法歌曲名称的列表吗?你的数据干净吗?请给我们更多信息。我使用几个api(包括last.fm)通过标题获取信息,因此如果我发送了错误的标题,它将显示不同的信息。如果我误解了,请道歉。你似乎在告诉我为什么清理标题很重要(这样你就可以用它来查找其他信息),但我在问你希望如何清理标题。您如何识别字符串“with”是否是标题的一部分?你有合法头衔的清单吗?您是否希望您的初始数据(您正在清理的内容)的格式与您的列表相匹配,或者它充满了逗号、破折号和拼写错误等?