#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:
- Вы объявляете идентификатор
c
дважды в одной и той же области метода, как параметр и как локальную переменную, которая не будет компилироваться; - Используйте
char
в качестве типа вашего параметра вместоString
, иначе вы рискуете принять строку длиннее 1 символа; кроме того,String
объект намного тяжелее; - Как правило, [почти] никогда не сравнивайте строки с
==
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 будет дизайн, в котором более производительный код будет полагаться на ссылки на пул строк.