java не может найти символ: метод в нижнем регистре (строка)

#java #string #character

#java #строка #символ

Вопрос:

Я пытался написать метод с именем isVowel, который возвращает, является ли строка гласной (однобуквенная строка, содержащая a, e, i, o или u, без учета регистра). Между тем, найдите конфликт между символом и строкой. Теперь, что делать? Спасибо вам всем.

 public static boolean isVowel(String c)
{
    String c = Character.toLowerCase(c);
    return c=="a"||c=="e"||c=="i"||c=="o"||c=="u";

}
  

переменная c уже определена в методе isVowel(строка)
!!не найден подходящий метод для toLowerCase (строка)

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

1. Почему ваш метод принимает String вместо char ? Каким должен быть результат, если мы назовем его как isVowel("abc") или isVowel("") ?

Ответ №1:

Вы передаете String , где Character ожидается. Если вы передаете только один символ String , используйте ниже для преобразования в нижний регистр.

 public static boolean isVowel(String s)
{
    char c = Character.toLowerCase(s.charAt(0));
    return c=='a'||c=='e'||c=='i'||c=='o'||c=='u';
}
  

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

1. Обновленный ответ. Используйте одинарные кавычки для сравнения

Ответ №2:

  1. Вы объявляете идентификатор c дважды в одной и той же области метода, как параметр и как локальную переменную, которая не будет компилироваться;
  2. Используйте char в качестве типа вашего параметра вместо String , иначе вы рискуете принять строку длиннее 1 символа; кроме того, String объект намного тяжелее;
  3. Как правило, [почти] никогда не сравнивайте строки с == operator . .equals(Object object) Вместо этого используйте.

Лучший, более чистый и быстрый дизайн метода был бы таким:

 public static boolean isVowel(char c) {
    return "aeiouAEIOU".contains(String.valueOf(c));
}
  

или даже лучше:

 public static boolean isVowel(char c) {
    return "aeiouAEIOU".indexOf(c)!=-1;
}
  

indexOf(int char) возвращает -1 , если char не найден.

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

1. «старайтесь не сравнивать строки с == » на самом деле должно быть » не сравнивать строки с == »

2. Ну .. пул строк есть .. и именно поэтому я намеренно сказал «старайся не делать этого» .. поскольку я не знаю, может быть, в некоторых случаях у OP будет дизайн, в котором более производительный код будет полагаться на ссылки на пул строк.