Поиск индекса первой гласной в строке

#java #string #if-statement #for-loop #return

#java #строка #if-оператор #for-цикл #Возврат

Вопрос:

Итак, у меня возникли проблемы с поиском индекса первой гласной в строке. Это код, который я придумал, но он ничего не возвращает. Предполагается, что он возвращает индекс первой гласной, например, если строка была «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;
    }
}
 

Комментарии:

1. Вы имели в виду indexOf(s.charAt(i)) , и вам нужно выйти из цикла, иначе вы найдете последний индекс гласной. Голосование за закрытие как «больше не может быть воспроизведено», поскольку маловероятно, что это будет полезно другим.

2. вам удалось это решить?

3. К вашему СВЕДЕНИЮ: название метода вводит в заблуждение. isVowel() похоже, что он должен возвращать логическое значение и не указывает, каким будет int возвращаемое значение. Хорошее имя может быть indexOfFirstVowel() .

4. Я еще не понял этого. Я сделал то, что предложил Андреас, но теперь он выдает мне ошибку. Я поставил разрыв в операторе if, но я не уверен, как еще завершить цикл. @ItamarGreen

5. установка разрыва завершает цикл

Ответ №1:

Используйте частный статический метод, чтобы проверить, является ли определенный символ гласным:

 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;
}   
 

Ответ №2:

Причина, по которой ваш метод ничего не возвращает, заключается в том, что он проверяет индекс целого числа в строке из всех гласных. Что вам нужно сделать, это проверить символ в i внутри s, посмотреть, является ли это гласной, а затем вернуть этот индекс.

Кроме того, я бы рекомендовал переименовать ваш метод во что-то вроде «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;
     }
}