无法在基本类型boolean上调用equals(boolean)

时间:2015-05-12 05:56:56

标签: java string if-statement

我想检查一个字符串的第一个和最后两个字符的相等性,所以我写了像

这样的条件
if (str.length() >= 4
            && ((str.startsWith(str.substring(0, 2))).equals(str.endsWith(str
                    .substring(str.length() - 3, str.length() - 1)))))

但是我收到了错误 无法在基本类型boolean

上调用equals(boolean)

那么根本原因是什么?

5 个答案:

答案 0 :(得分:3)

错误即将发生,因为:str.startsWith()返回boolean值,我们使用布尔

调用equals()

使用此表达式进行比较:

    str.substring(0, 2).equals(str.substring(str.length() - 3, str.length() - 1))

答案 1 :(得分:2)

  

我想检查字符串的第一个和最后两个字符的相等性

这不是你正在做的事情。您正在使用startsWithendsWith - 您正在询问字符串是否以其自己的前两个字符开头,以及它是否以字符串的某些部分接近结尾,并且然后尝试比较这些比较的结果......除了您尝试将两个boolean值与equals而不是==进行比较之外,这不是工作要么。

您只需要substringequals - 但您的substring也不正确,因为找到最后两个字符时会有一个错误的错误。为简单起见,我个人会将其分开:

if (str.length() > 4) {
    String start = str.substring(0, 2);
    // If you don't specify an end point, it'll be "the rest of the string"
    // which is what you want.
    String end = str.substring(str.length() - 2);
    if (start.equals(end)) {
        ...
    }
}

答案 2 :(得分:1)

endsWith api将返回一个布尔值,因此编译器正在编译您正在尝试将String与布尔值进行比较。相反,你可以做类似的事情:

if (str.endsWith(str.substring(0, 2))) {
     //ye it does ends with same string as it starts with
}

答案 3 :(得分:1)

方法startsWith(String)返回一个布尔值,指示它所应用的字符串是否有效地以字符串参数开头。为了比较前两个字符和后两个字符,您的布尔条件可以是:

if(str.length() >= 4 && str.startsWith(str.substring(str.length - 3, str.length()))

请注意substring方法中的索引,因为最后一个参数表示第一个字符的位置不包含在子字符串中。 结果相同但使用endsWith(String)方法:

if(str.length() >= 4 && str.endsWith(str.substring(0, 3)))

或仅使用sunbstring(int, int)方法:

if(str.length() >= 4 
&& str.substring(0, 3).equals(str.substring(str.length() - 3, str.length())))

答案 4 :(得分:0)

您的问题源于

((str.startsWith(str.substring(0, 2))).equals(str.endsWith(str
                .substring(str.length() - 3, str.length() - 1))))

这基本上归结为boolean.equals(...),由于boolean不是Object

,因此无法完成

相反,您可以使用String#startsWithString#endsWith,例如......

if (str.length() >= 4 &&
    str.endsWith(str.substring(0, 2)) &&
    str.startsWith(str.substring(str.length() - 2))) {

或者甚至可能

if (str.length() >= 4 &&
    str.substring(0, 2).equals(str.substring(str.length() - 2))) {