我想检查一个字符串的第一个和最后两个字符的相等性,所以我写了像
这样的条件if (str.length() >= 4
&& ((str.startsWith(str.substring(0, 2))).equals(str.endsWith(str
.substring(str.length() - 3, str.length() - 1)))))
但是我收到了错误 无法在基本类型boolean
上调用equals(boolean)那么根本原因是什么?
答案 0 :(得分:3)
错误即将发生,因为:str.startsWith()返回boolean
值,我们使用布尔
equals()
使用此表达式进行比较:
str.substring(0, 2).equals(str.substring(str.length() - 3, str.length() - 1))
答案 1 :(得分:2)
我想检查字符串的第一个和最后两个字符的相等性
这不是你正在做的事情。您正在使用startsWith
和endsWith
- 您正在询问字符串是否以其自己的前两个字符开头,以及它是否以字符串的某些部分接近结尾,并且然后尝试比较这些比较的结果......除了您尝试将两个boolean
值与equals
而不是==
进行比较之外,这不是工作要么。
您只需要substring
和equals
- 但您的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#startsWith
和String#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))) {