【发布时间】:2021-03-12 09:16:34
【问题描述】:
我在大学学习 Java,需要编写一个静态 int countCapitals(String s) 方法,该方法返回字符串 s 中有多少单词以大写字母开头。
大写字母是UPPERCASE_LETTER类型或TITLE CASE_LETTER类型的字符(Character)。单词是由一个或多个空格、字符、符号或标点符号分隔的字母或数字序列。
New.countCapitals("你好,亲爱的朋友们!这里——以Ćapital ŁeTtErS开头的单词") == 6
我只能使用 String 和 Character 类中的方法。(没有 RegEx)
public class New {
static int countCapitals(String s) {
int c = 0;
if (Character.isUpperCase(s.charAt(0)) == true
|| Character.isTitleCase(s.charAt(0)) == true) {
c++;
}
for (int i = 0; i < s.length() - 1; i++) {
if (Character.isLetter(s.charAt(i)) == false
&& Character.isLetter(s.charAt(i + 1)) == true) {
if (Character.isUpperCase(s.charAt(i + 1)) == true
|| Character.isTitleCase(s.charAt(i + 1)) == true) {
c++;
}
}
}
return c;
}
}
这是我的代码,但它不适用于某些测试。测试已关闭,所以我不知道哪些测试。您能告诉我哪里出了问题以及如何解决吗?
【问题讨论】:
-
提示:你不需要其他人来解决这些问题。相反:退一步想想你自己的测试。问问自己“正常情况”和“边缘情况”等等。并且:考虑不使用单个字符变量名。如果有的话,使用那些循环索引。但是其他名称应该告诉读者变量是关于什么的。 c, s ... 什么都不告诉读者。
-
不确定您所说的“测试已关闭”是什么意思,您如何执行代码以查看其是否按预期执行?最简单的方法是创建另一个测试类,根据您在帖子顶部显示的测试用例字符串运行您的代码。剥离所有代码并从您的方法中返回零并运行测试用例 - 这当然是错误的。但是现在你有了一个可重复的测试,实现你的算法并重复,直到你做对了。否则你只是在猜测。
-
@stridecolossus - 我认为 OP 指的是教师运行的测试,因为学生看不到代码运行时将抛出的测试用例,当应用已提交。
-
@DavidMakogon 是的,假设是这样的,因此建议创建一个测试用例。
-
如果你使用 String#split() 将你的句子分成单词,你需要做的就是检查每个单词的第一个字符。然后您需要做的就是遍历数组并检查
word.charAt(0)是否符合您对大写字母的定义。