使用.equals()检查字符串中的字符不起作用

时间:2016-10-20 23:06:07

标签: java string

我正在尝试检查用户提交的信件是否包含在字符串中,但它总是返回false。从我读到的.equals()函数应该工作。我期待如果用户输入字母“a”,如果字符串是“美国”,它将返回“通过”。

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

4 个答案:

答案 0 :(得分:1)

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

outputTest.charAt(i)会返回char,但您要将其与等于方法的String进行比较:

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 }

因为equals期待Objectchar(从outputTest.charAt(i)返回)将自动加到Character,但由于Character没有&String #39; t扩展if (anObject instanceof String) 测试

return false;

将失败,您将立即转到contains

如果您想检查一个String是否包含其他

,您可能需要使用outputTest.contains(userInput) 方法
a ; b
b ; c
c ; d,e

答案 1 :(得分:1)

要在另一个字符串中查找字符串,只需执行:

return text.contains(string);

要在字符串中查找字符,请执行

return text.indexOf(ch) > -1;

答案 2 :(得分:0)

对象 userInput 的数据类型是什么?您似乎将String对象与charAt()方法返回的字符进行比较。这总是会返回错误。

答案 3 :(得分:0)

当您学习使用方法时,开发的一个好习惯是查看方法应用或返回的数据类型。例如,您无法对此进行编码:07 * * * * /usr/bin/php /var/www/html/folder/cron.php 因此,在您的代码char scanner.nextLine() // nextLine() is to read String, not char.和此outputTest.charAt(i) // I am a char中,您正在比较不同的内容。您不能将苹果与桌子进行比较,因为它们是两个不同的对象。编译器总是会告诉你错误。

我假设:userInput.equals() // I am a String用户输入一个字母,您可以将String inputTest = scanner.nextLine();视为长度为1的字符串(或其他任何字母)

"a"