当前位置: 首页 > 知识库问答 >
问题:

蝙蝠计数

戚俊健
2023-03-14

Codingbat的任务:

给定一个字符串,计算以“y”或“z”结尾的单词数——“heavy”中的“y”和“fez”中的“z”,而不是“yellow”中的“y”(不区分大小写)。如果单词后面没有字母,我们会说y或z位于单词的末尾。(注意:字符。Isleter(char)测试字符是否为字母。)

countYZ("fez day") → 2
countYZ("day fez") → 2
countYZ("day fyyyz") → 2

我正在尝试这样解决这个任务:

public int countYZ(String str) {
      String regex = "(.[.^y^z]\\b)";
      return str.toLowerCase().replaceAll(regex, "").length();
    }

但并不是所有的测试都通过了。如何修复regex=([..^y^z]\b)”以通过所有测试?

共有2个答案

太叔睿
2023-03-14

最好在可以的地方限制使用正则表达式。您可以这样制作解决方案:

public static int countYZ(String str) {
    String[] strings = str.toLowerCase().split("\\s");
    int n = 0;
    for (String s : strings) {
        if (s.endsWith("y") || s.endsWith("z")) {
            n++;
        }
    }
    return n;
}
皇甫俊雅
2023-03-14

您可以在不后跟字符a-z的捕获组中捕获y或z,并匹配任何其他字符。

在替换中,使用捕获组1。

([yYzZ](?![A-Za-z]))|.

解释

  • (捕获组1

请参阅regex演示和Java演示。

示例

public int countYZ(String str) {
  String regex = "([yYzZ](?![A-Za-z]))|.";
    return str.toLowerCase().replaceAll(regex, "$1").length();
}

或更广泛匹配的unicode变体:

public int countYZ(String str) {
  String regex = "([YyZz])(?!\\p{IsAlphabetic})|.";
    return str.toLowerCase().replaceAll(regex, "$1").length();
}
 类似资料:
  • 我试图在codingbat上解决这个数组问题,但我有一些问题,我的代码的问题是它没有找到最大的奇数 赋值返回给定数组的一个版本,其中数组中的每个零值都被数组中零值右侧的最大奇数替换。如果零的右边没有奇数,则将零保留为零。 这是我的密码

  • CodingBat中的给定任务sameEnds: 给定一个字符串,返回出现在字符串开头和结尾且不重叠的最长子字符串。例如,sameEnds(“abXab”)是“ab”。 我的解决方案通过了所有测试,除了一个^: 这里有什么问题?我怎样才能修复它?

  • 给定CodingBat中的任务maxBlock: 给定一个字符串,返回字符串中最大“块”的长度。块是相同的相邻字符的运行。 我的解决方案通过了所有测试,除了一个:

  • 我是新的编码,并有这个问题的问题,任何帮助都是感激的。 提示:将你的BMI计算四舍五入到小数点后一位。确保返回的消息与显示的完全相同。 我做错了什么!!这就是我得到的错误。 错误:公共字符串BMIResult(双重,双高){

  • 我遇到了一个关于编码蝙蝠的问题,问题是: 给定一个字符串,返回一个由原始字符串的最后2个字符的3个副本组成的新字符串。字符串长度至少为2。我解决了这个问题,解决方案(下图)比我的好,但是,解决方案代码有一个问题,当字符串长度小于2时,假设长度只有1。str索引将是-1。代码还能工作吗?为什么网站说解决方案是正确的?