给定一个字符串,计算结束于' y'或者' z'

时间:2015-08-20 20:25:33

标签: java string

给定一个字符串,计算以'y''z'结尾的单词数量 - 这样{&1 34}中的'y'重"和'z' in" fez"计数,但不是'y' in" yellow" (不区分大小写)。如果在其后面没有字母字母,我们会说yz位于单词的末尾。 (注意:Character.isLetter(char)测试char是否是字母。)

例如,

    countYZ("fez day") → 2
    countYZ("day fez") → 2
    countYZ("day fyyyz") → 2
    countYZ("day yak") → 1  
    countYZ("day:yak") → 1      
    countYZ("!!day--yaz!!") → 2 

但我没有遇到这些情况:

countYZ("fez day") → should be 2 but Im getting 1           
countYZ("day fez") → should be 2 but Im getting 1    
countYZ("day fyyyz") → should be 2 but Im getting 1

smb可以看一下,看看我的代码有什么问题吗?提前谢谢!

public int countYZ(String str) {

  int count = 0;
  for(int i = 0; i < str.length()-1; i++){
    if((str.charAt(i) == 'y' || str.charAt(i) == 'z')
     && !(Character.isLetter(str.charAt(i + 1)))){
        count++;
     } 
  }
  return count;
}

2 个答案:

答案 0 :(得分:3)

你需要在字符串的最末端包含单词的角点的逻辑。

答案 1 :(得分:1)

由于您使用regex标记了该问题,因此这是使用regular expressions的解决方案:

public int countYZ(String str) {
    Matcher m = Pattern.compile("[yz]\\b").matcher(str);
    int count = 0;
    while (m.find())
        count++;
    return count;
}

这里,表达式"[yz]\\b"表示&#34; y或z,后跟单词边界&#34;,即只要在单词的末尾有y或z,它就匹配。只计算比赛。