In the example code, I used String::charAt as a method reference. Question was "Why can’t String::charAt be used as a method reference?" but it can be used as method reference.
Question "says" it can't, but it can, so I think that this question is incorrect
String::charAt is in fact a BiFunction, taking two parameters: a String and an int. A Stream usually has only one parameter, so String::charAt is not possible in a Stream (? really). However, if s is a given String, then s::charAt is very well possible in a Stream. And if, like in the examples given, you do have two parameters, then there is nothing wrong with String::charAt. For example:
There are three kinds of actuaries: those who can count, and those who can't.