在一个单词的末尾计算y和z

时间:2013-09-06 05:49:21

标签: java

这就是问题:给定一个字符串,计算以“y”或“z”结尾的单词数 - 所以“重”中的“y”和“fez”中的“z”计数,但不是“黄色”中的“y”(不区分大小写)。如果没有紧跟在它后面的字母,我们会说y或z位于单词的末尾。 (注意:Character.isLetter(char)测试char是否为字母。)

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

这是我的代码:

public int countYZ(String str) {
  int count = 0;
  for (int i=0; i<str.length(); i++){
  if (Character.isLetter(i) && (Character.isLetter(i+1)==false || i+1==str.length()) && (Character.toLowerCase(str.charAt(i))=='y' || Character.toLowerCase(str.charAt(i))=='z')){
  count++;
  }
  }
  return count;
}

我知道它很乱,但我只想弄清楚它为什么现在不起作用。每次运行都返回“0”。在if语句中,我正在检查:我是一封信吗?是i + 1一个字母或字符串的结尾?最后,如果我是'y'或'z'。感谢帮助!

10 个答案:

答案 0 :(得分:5)

您可以使用正则表达式:

public int countYZ(String str) {
    int count = 0;
    Pattern regex = Pattern.compile("[yz](?!\\p{L})", Pattern.CASE_INSENSITIVE);
    Matcher regexMatcher = regex.matcher(str);
    while (regexMatcher.find()) {
        count++;
    } 
    return count;
}

<强>说明:

[yz]      # Match the letter y or z
(?!\p{L}) # Assert that no letter follows after that

答案 1 :(得分:3)

使用split()endsWith()

public static int countYZ(String str) {
        int count = 0;
        String temp[] = str.split(" ");
        for (int i = 0; i < temp.length; i++) {
            if (temp[i].trim().endsWith("y") || temp[i].trim().endsWith("z"))
                count++;
        }
        return count;
    }

输出,根据需要为您的所有案例

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

答案 2 :(得分:2)

尝试此修复

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

答案 3 :(得分:1)

试试这个

public class CountXY {

    /**
     * @param args
     */
    public static int countXY(String str){
        int count = 0;
        String strSplit[] = str.split(" ");
        for(String i:strSplit){
            if(i.endsWith("y")||i.endsWith("z")||i.endsWith("Y")||i.endsWith("Z")){
                count++;
            }
        }
        return count;   
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "Abcy Asdz z z z y y y yyu ZZ Y ";
        System.out.println("Count::"+countXY(str));
    }

}

答案 4 :(得分:0)

你也可以尝试这个

 public static void main(String[] args){
    System.out.println(countYZ("abcxzy"));
}

public static int countYZ(String str) {
    int countYandZ=0;
    String[] arr=str.split(" ");
    for (String i:arr){
        if(("Y".equalsIgnoreCase(String.valueOf(i.charAt(i.length()-1))))||("Z".equalsIgnoreCase(String.valueOf(i.charAt(i.length()-1))))){
              countYandZ++;
        }
    }
    return countYandZ;
}

答案 5 :(得分:0)

您的代码无效,因为有以下两个条件

Character.isLetter(i) - &gt;在这里你正在检查isLetter for the int is int

(Character.isLetter(i + 1)== false - &gt;它会导致错误索引

请检查以下我已检查其工作正常,其代码的修改版本

public class FirstClass {
    public static void main(String args[]) {
        String string="fez day";
          int count = 0;
         String[] strcheck = string.split(" "); 
         for (String str : strcheck) {
          if (Character.isLetter(str.charAt(str.length()-1)) &&(Character.toLowerCase(str.charAt(str.length()-1))=='y' || Character.toLowerCase(str.charAt(str.length()-1))=='z')){
              count++;
          }
         }
          System.out.println(count);
        }
}

希望这会有所帮助,祝你好运

答案 6 :(得分:0)

这就是我所做的:

public int countYZ(String str) {
      //Initialize a return integer
      int ret = 0;
      //If it has at least 2 characters, we check both ends to see how many matching instances we have.
      if (str.length() >= 2)
      {
        if (!Character.isLetter(str.charAt(1)) && (str.charAt(0) == 'y' || str.charAt(0) == 'Y' || str.charAt(0) == 'z' || str.charAt(0) == 'Z')) 
        {
          ret++;
        }
        if (Character.isLetter(str.charAt(str.length() - 2)) && (str.charAt(str.length()-1) == 'y' || str.charAt(str.length()-1) == 'Y' || str.charAt(str.length()-1) == 'z' || str.charAt(str.length()-1) == 'Z')) 
        {
          ret++;
        }
      }
      //If it has more than 3 characters, we check the middle using a for loop.
      if (str.length() >= 3)
      {
        for (int i = 2; i < str.length(); i++)
        {
          char testOne = str.charAt(i-2);
          char testTwo = str.charAt(i-1);
          char testThree = str.charAt(i);
          //if the first char is a letter, second is a "YZyz" char, and the third is not a letter, we increment ret by 1.
          if (Character.isLetter(testOne) && (testTwo == 'y' || testTwo == 'Y' || testTwo == 'z' || testTwo == 'Z') && (!Character.isLetter(testThree)))
          {
            ret++;
          }
        }
      }
      return ret;
    }

答案 7 :(得分:0)

public static int countYZ(String str) {
        String[] array = str.split("[^a-zA-Z]");
        int count = 0;
        for (String s : array) {
            if (s.toLowerCase().trim().endsWith("y") || s.toLowerCase().trim().endsWith("z"))
                count++;
        }
        return count;
    }

答案 8 :(得分:0)

public  int countYZ(String str) {
    int count=0;

    if ( str.charAt(str.length() - 1) == 'z'||
         str.charAt(str.length() - 1) == 'y'|| 
         str.charAt(str.length() - 1) == 'Z'||
         str.charAt(str.length() - 1) == 'Y' ) {
         count += 1;
    }

    for (int i = 0; i < str.length(); i++) {
        if ( i > 0 ) {
            if ( !( Character.isLetter(str.charAt(i)) ) ) {

                if ( str.charAt(i - 1) == 'y' ||
                     str.charAt(i - 1) == 'z' ||
                     str.charAt(i - 1) == 'Y' ||
                     str.charAt(i - 1) == 'Z' ) {
                    count += 1;
                }
            }
        }
    }

    return count;
}

答案 9 :(得分:0)

这允许单词用字母以外的任何其他字符分隔。空格,数字等。

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