我从文件中读取了一些如下所示的字符串
list720 --playlist-start=15 https://www.youtube.com/playlist?list=PLS1QulWo1RIYmaxcEqw5JhK3b-6rgdWO_
我需要用户输入一个名称(例如“ Anderson”或“ Galvis”),如果该名称不足以标识唯一的播放器,则需要打印错误消息。 因此,如果用户要选择“ Anderson,T”,则必须指定“ Anderson,T”)。
当前,我有一个函数,该函数使用名称(“ Anderson,T”或“ Anderson,B”)并找到正确的字符串,该函数可以在下面找到
"Anderson, T",CWS,SS,...
"Anderson, B",MIA,3B,...
"Galvis, F",CIN,SS,...
我是否可以修改代码,使其包含“ Anderson”,然后打印出错误?
答案 0 :(得分:1)
由于该方法名为findPlayer
,因此它应返回找到的播放器。
由于如果有多个与该名称匹配的播放器,您希望它失败,因此可以使用异常来表明这一点。
您显然想知道是否找不到玩家,因此您可以返回null
,或将返回类型更改为Optional
,或抛出另一个异常来表明这一点。
对于非唯一名称,此处为例外,对于未找到,null
为例外:
public static Player findPlayer(String playerName) {
Pattern nameRegex = Pattern.compile(Pattern.quote(playerName), Pattern.CASE_INSENSITIVE);
Player foundPlayer = null;
for (Player player : players) {
if (nameRegex.matcher(player.toString()).find()) {
if (foundPlayer != null)
throw new IllegalArgumentException("Multiple player matches name: " + playerName);
foundPlayer = player;
}
}
return foundPlayer; // returns null if not found
}
已更改代码以将正则表达式用于不区分大小写的contains
逻辑,因此在搜索过程中不会创建很多中间的小写字母字符串。