startsWith(String word, char c) 中的参数

Parameters in startsWith(String word, char c)

我正在努力理解为了准备几天后的考试而收到的练习任务。这是我到目前为止的代码:

/**
 * Check if the first letter in this word matches the given letter c
 * @param word a word
 * @param c - a character a-z upper or lower case
 * @return true if first letter in word matches c
 */
@Override
public boolean startsWith(String word, char c) {
}

我应该编写能够通过单独文件中的测试要求的代码。所有的测试代码都已经给我了,我唯一的任务就是编写代码,如果 String word 中的第一个字母与 char c 匹配,则 returns 为 true。字母是大写还是小写都没有关系,因为带有测试代码的文件包含处理此问题的代码。 总结一下: 我想我要的是帮助理解我到底应该做什么?我试过按照这个思路写一些东西,但我认为这是不正确的,我认为我完全忽略和忽略了任务的很大一部分:

@Override
public boolean startsWith(String word, char c) {
    if (word.startsWith(word, c)) {
        return true;
    } else {
        return false;
    }
}

这里的问题是您误解了 startsWith() 方法的参数。第一个参数是前缀。那应该是你的性格,c。第二个参数是开始查找该前缀的偏移量。在这种情况下,您希望它为 0。您真正想要的是 word.startsWith(Character.toString(c), 0)。您的原始代码没有抛出 compile-time 异常的原因是因为字符 c 只是被视为一个数字,并且它被向上转换为 int 以匹配方法 header startsWith() 方法。

string startsWith 方法文档来自 oracle:

startsWith(String prefix, int offset)

Tests if the substring of this string beginning at the specified index starts with the specified prefix.

但是你需要测试第一个字符是否以字符c开头。因此,您可以使用 startsWith(String word)(来自 String)的重载版本。这是我的 2 个选项:

选项 1:

@Override
public boolean startsWith(String word, char c) {
    return word.charAt(0) == c; 
}

选项 2:

@Override
public boolean startsWith(String word, char c) {
    return word.startsWith(String.valueOf(c); 
}

请注意,您可以通过检查答案中提到的“word”参数无效来改进此方法。例如:

@Override
public boolean startsWith(String word, char c) {
    return word != null && word.startsWith(String.valueOf(c); 
}

了解在哪里可以找到您正在使用的 Java 标准库版本的 Java 文档对您有很大帮助。 Java 10 的那些在此处:https://docs.oracle.com/javase/10/docs/api/index.html?overview-summary.html, and those for several other versions are nearby. Among the things you can do with those is look up classes of interest, such as java.lang.String,以确定它们提供的方法并了解这些方法的参数和行为的详细信息。

特别是,您可能会考虑检查 String 的几个 startsWith() 方法,在这种情况下您会发现它们确定 String 对象是否 它们被调用 以特定字符串或匹配特定模式的字符串开头。这不是您尝试使用与您的调用参数匹配的方式。

另一个答案描述了您可以应用 String.startsWith() 来解决您的问题,但这不是您唯一的选择。细读可用的方法会发现几种从 String 中获取单个 char 的方法,例如 charAt() 方法。如果您确实不需要担心大小写(这对我来说听起来很奇怪),那么就我个人而言,我倾向于提取第一个字符(在索引 0 处)并将其与感兴趣的字符进行比较。也就是说,我将从这里开始:

char firstChar = word.charAt(0);

剩下的留作练习。