【问题标题】:java cannot find symbol: method toLowerCase(String)java找不到符号:方法toLowerCase(String)
【发布时间】:2021-02-08 22:19:23
【问题描述】:

我正在尝试编写一个名为 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(String) 中定义 !!找不到适合 toLowerCase(String) 的方法

【问题讨论】:

  • 为什么你的方法使用String而不是char?如果我们将其称为isVowel("abc") 或isVowel(""),应该会产生什么结果?

标签: java string character


【解决方案1】:
  1. 您在同一方法范围内声明了标识符c 两次,分别作为参数和局部变量,这将不会编译;
  2. 使用char 作为参数类型,而不是String,否则您可能会接受长度超过1 个字符的字符串;此外,String 对象要重得多;
  3. 一般来说,[几乎] 从不使用== 运算符比较字符串。请改用.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)returns-1,如果没有找到char。

【讨论】:

  • "try not to compare strings with ==" 应该真的是 "don't compare strings with =="
  • 嗯.. 字符串池在那里.. 这就是为什么我故意说“尽量不要”.. 因为我不知道,也许在某些情况下,OP 会有一个设计,其中更多高性能代码将依赖于字符串池引用。
【解决方案2】:

您正在传递 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';
}

【讨论】:

  • 更新了答案。在比较中使用单引号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
  • 1970-01-01
  • 2021-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多