识别唯一的字符串

时间:2019-11-27 23:31:16

标签: java string

我从文件中读取了一些如下所示的字符串


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”,然后打印出错误?

1 个答案:

答案 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逻辑,因此在搜索过程中不会创建很多中间的小写字母字符串。