2015-05-12 45 views
0

我想查一个字符串的第一个和最后两个字符的平等,所以我写了条件像不能调用的基本布尔型的equals(布尔)

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

,但我得到错误的 无法在原始类型上调用equals(boolean)布尔值

那么根源是什么?

+0

有原始类型(不是对象)和其他一切之间的差异。 'String#startsWith'返回一个'boolean' ... – MadProgrammer

回答

3

误差来,因为:str.startsWith()返回boolean价值,我们正与调用equals()布尔

用这句话来比较:

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

的endsWith API将返回一个布尔值,因此编译器正在编译你试图比较字符串与布尔值。相反,你可以这样做:

if (str.endsWith(str.substring(0, 2))) { 
    //ye it does ends with same string as it starts with 
} 
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)) { 
     ... 
    } 
} 
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))) { 
1

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