【问题标题】:charAt cannot be dereferencedcharAt 不能被取消引用
【发布时间】:2023-03-09 21:45:02
【问题描述】:

尝试 FizzBu​​zz 问题,但遇到“charAt 无法取消引用”的问题。下面是我的代码供参考。

  public String fizzString(String str) {

  if ((str.charAt(0).equals('f'))&&(str.charAt((str.length)-1).equals('b'))){
   return "FizzBuzz";
  }
  else if (str.charAt(0).equals('f')){
   return "Fizz";
  }
  else if (str.charAt((str.length)-1).equals('b')){
   return "Buzz";
  }
  else{
   return "FizzBuzz";
  }

}

【问题讨论】:

  • 比较基本类型,如char==
  • 它返回一个char,你可以和==比较。
  • 有趣的是,这正是臭名昭著的 FizzBu​​zz 问题所要揭示的类型。
  • 我改为使用 startWith() 和 endWith() 函数来帮助解决我的问题,但是使用这个示例,但是使用 == 并将长度更改为 length(),仍然没有解决我的问题版本。
  • 想法? 我更喜欢String.startsWithString.endsWith,而不是String.charAt。我不会多次执行测试,而是将结果保存到局部变量中。我会开始 boolean f = str.startsWith("f"), b = str.endsWith("b");。如果两个条件都不成立,请不要忘记返回原始 str(您当前返回“FizzBu​​zz”两次)。如果你真的想使用String.charAt - boolean f = str.charAt(0) == 'f', b = str.charAt(str.length() - 1) == 'b';

标签: java char charat


【解决方案1】:

让我们看下面的例子:

String str = "fab";
System.out.println(str.charAt(0) == 'f'); //true
System.out.println(str.charAt(0).equals('f')); //error: Cannot invoke equals(char) on the primitive type char
System.out.println(Character.toString(str.charAt(0)).equals("f")); //true
System.out.println(str.startsWith("f")); //true

如果str 是一个空字符串呢:

String str = "";
System.out.println(str.charAt(0) == 'f'); //java.lang.StringIndexOutOfBoundsException
System.out.println(str.charAt(0).equals('f')); //error: Cannot invoke equals(char) on the primitive type char
System.out.println(Character.toString(str.charAt(0)).equals("f")); //java.lang.StringIndexOutOfBoundsException
System.out.println(str.startsWith("f")); //false

现在我想你已经知道使用String.startsWithString.endsWithString.charAt 更好。

【讨论】:

    猜你喜欢
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 2017-02-10
    • 2018-03-26
    • 2023-03-31
    相关资源
    最近更新 更多