我目前正在编写一个音乐机器人,它可以从 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
目前我使用拆分,但我认为这不是处理它的好方法,因此我想知道是否有一个好方法可以使这两个陈述都成立。
最佳答案
我确信您必须使用两次搜索。一个用于艺术家,一个用于歌曲名称(正如 Sedrick 所建议的那样),否则查询起来会非常困难。
第一步是识别艺术家。因为有很多重叠和重复的歌名。 (也有重叠和重复的艺术家姓名,但与歌曲标题相比,绝对数量较少。)。一些人工智能或机器学习可以大大提高找到合适艺术家的准确性。
然后您可以尝试从查询中减去艺术家姓名,并用余数搜索歌曲标题。 (理想情况下,就在属于通过某种选择查询检索到的已识别艺术家的歌曲名称列表中。)
希望这会有所帮助!
关于java - 如何检查字符串 B 的任何部分是否在字符串 A 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49071925/