java如何检查字符串B的任何部分是否在字符串A中
我目前正在编程一个音乐机器人,从Spotify获取音乐。我正在努力检查用户查询中是否同时包含歌曲名称和艺术家(之所以需要,是因为Spotify会在歌曲名称之前查找唱片集名称,因此它会在适合用户查询的唱片集中查找最流行的歌曲)
这是我的代码当前的状态:
String query="Megadeth Holy Wars";
String artist="Megadeth";
String songName="Holy Wars...The Punishment Due - 2004 Digital Remaster";
System.out.println("Query >>> "+query.toLowerCase());
System.out.println("Artist >>> "+artist.toLowerCase());
System.out.println("Song name >>> "+songName.toLowerCase());
System.out.println("Query contains artist: "+query.toLowerCase().contains(artist.toLowerCase()));
System.out.println("Query contains song name: "+query.toLowerCase().contains(songName.toLowerCase()));
这是输出:
Query >>> megadeth holy wars
Artist >>> megadeth
Song name >>> holy wars...the punishment due - 2004 digital remaster
Query contains artist: true
Query contains song name: false
目前我使用分割,但我不认为这是一个好的处理方法,所以我想知道是否有一个好的方法,这两种说法都是正确的
# 1 楼答案
我确信您将不得不使用两次搜索。一个是艺术家,一个是歌曲名——正如塞德里克所建议的那样——否则,对于复杂的查询来说,这将非常困难
第一步是确定艺术家的身份。因为有更多的重叠和重复的歌曲标题。(也有重叠和重复的艺术家姓名,但与歌曲名称相比,绝对数字较少。)。一些人工智能或机器学习可以大大提高获得正确艺术家的准确性
然后,您可以尝试从查询中减去艺术家姓名,并用余数搜索歌曲标题。(理想情况下,仅在通过某种select查询检索到的属于已识别艺术家的歌曲标题列表中。)
我希望这有帮助