簡體   English   中英

無法在基本類型boolean上調用equals(boolean)

[英]Cannot invoke equals(boolean) on the primitive type boolean

我想檢查字符串的前兩個字符是否相等,所以我寫的條件如下

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

但由於無法在原始類型boolean上調用equals(boolean)而出現錯誤

那么根本原因是什么?

由於即將出現錯誤,因為:str.startsWith()返回boolean值,並且我們使用Boolean調用equals()

使用此表達式進行比較:

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

我想檢查字符串的前兩個字符是否相等

那不是你在做什么。 您正在使用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)) {
        ...
    }
}

startswith api將返回一個布爾值,因此編譯器正在編譯您試圖將String與boolean進行比較。 相反,您可以執行以下操作:

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

startsWith(String)方法返回一個布爾值,該布爾值指示是否有效地對其應用的字符串以string參數開頭。 為了比較前兩個字符和后兩個字符,您的布爾條件可以是:

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

請注意子字符串方法中的索引,因為最后一個參數指示不包括在子字符串中的第一個字符的位置。 結果相同,但使用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())))

您的問題源於

((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))) {

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM