我正在尝试检查用户提交的字母是否包含在字符串中,但它始终返回false。从我的阅读中,.equals()函数应该可以正常工作。我期望如果用户输入字母“ a”,如果字符串是“ america”,它将返回“ pass”。

 for (int i = 0; i < outputTest.length(); i++){
                    if (userInput.equals(outputTest.charAt(i))){
                        System.out.println("Pass");
                    }else {
                        System.out.println("Fail");
                    }
                }

最佳答案

基于outputTest.length()outputTest.charAt()我假设outputTest是字符串。
基于userInput.equals我假设它不是像char这样的原始类型(因为原始类型没有方法)。它也不是Character,否则您会多次看到Pass。因此,很可能也是String。



outputTest.charAt(i)返回char,但是您将其与String进行比较,后者等于equals方法,如下所示:

964  public boolean equals(Object anObject) {
965 if (this == anObject) {
966 return true;
967 }
968 if (anObject instanceof String) {
969 String anotherString = (String)anObject;
970 int n = value.length;
971 if (n == anotherString.value.length) {
972 char v1[] = value;
973 char v2[] = anotherString.value;
974 int i = 0;
975 while (n-- != 0) {
976 if (v1[i] != v2[i])
977 return false;
978 i++;
979 }
980 return true;
981 }
982 }
983 return false;
984 }

So since equals expects Object, char (returned from outputTest.charAt(i)) will be automatically boxed to Character, but since Character doesn't extend String test

if (anObject instanceof String)


将失败,您将立即移至return false;



如果要检查一个contains是否包含另一个String,则可能要使用方法。

outputTest.contains(userInput)

10-05 23:03