【问题标题】:Finding the index of the first vowel in a string查找字符串中第一个元音的索引
【发布时间】:2017-02-23 02:23:07
【问题描述】:

所以我很难找到字符串中第一个元音的索引。这是我想出的代码,但它没有返回任何内容。 它应该返回第一个元音的索引,例如,如果字符串是“Hello World”,它应该返回 1,因为第一个元音的索引是“e”。如果给定字符串中没有元音,它应该返回 -1。

public class Vowel
{
    public static int isVowel(String s)
    {
        int a = -1;
        for(int i = 0; i < s.length(); i++)
        {
            if("aeiouAEIOU".indexOf(i) >= 0)
            {
                a = i;  
            }
        }
        return a;
    }
}

【问题讨论】:

  • 你的意思是indexOf(s.charAt(i)),你需要退出循环,否则你会找到元音的last索引。投票结束,因为“不能再被复制”,因为这不太可能对其他人有任何用处。
  • 你解决了吗?
  • 仅供参考: 方法名称具有误导性。 isVowel() 听起来应该返回一个布尔值,并没有表明 int 返回值是什么。好名字可能是indexOfFirstVowel()
  • 我还没弄明白。我做了安德烈亚斯的建议,但现在它给了我一个错误。我在 if 语句中放了一个中断,但我不确定如何结束循环。 @ItamarGreen
  • 放一个break结束循环

标签: java string if-statement for-loop return


【解决方案1】:

您的方法没有返回任何内容的原因是它正在检查所有元音字符串中整数的索引。您应该做的是检查 s 内 i 处的字符,看看它是否是元音,然后返回该索引。

另外,我建议将您的方法重命名为“indexFirstVowel”之类的名称。如果您想尝试,以下是一个可能的解决方案:

public class Vowel
{

     public static void main(String[] args)
     {
        int x = indexFirstVowel("Hello World");
     }


     public static int indexFirstVowel(String s)
     {
        for(int i = 0; i < s.length(); i++)
        {
              switch(s.charAt(i))
              {
                  case 'a':
                  case 'e':
                  case 'i':
                  case 'o':
                  case 'u':
                  case 'A':
                  case 'E':
                  case 'I':
                  case 'O':
                  case 'U':
                     return i;
                  default:
                     break;
              }
         }

          return -1;
     }
}

【讨论】:

    【解决方案2】:

    利用私有静态方法检查某个字符是否为元音:

    public static int firstVowelPos(String s) {
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if (isVowel(c))
                return s.indexOf(c);
        }
        return -1;
    }   
    
    private static boolean isVowel(char c) {
          return "AEIOUaeiou".indexOf(c) != -1;
    }
    

    如果您不需要在代码中的其他任何地方检查元音,这可以通过将元音检查移到条件语句中来简化:

    public static int firstVowelPos(String s) {
        for (int i = 0; i < s.length(); i++) {
            char c = s.charAt(i);
            if ("AEIOUaeiou".indexOf(c) != -1)
                return s.indexOf(c);
        }
        return -1;
    }   
    

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 2011-05-29
      • 2020-08-02
      • 2018-04-20
      • 1970-01-01
      • 2012-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多