这是java字符串比较中一个非常奇怪的问题。我实际上是java的新手,所以请原谅我是否理解错误。
目标是获取文本的网址"下一个?"应该分配给nextLink。第一个if块能够找到" Next"在我的linkText String对象中,但第二个if块失败。
以下是代码:
String linkText = link.text().trim();
if(linkText.contains("Next"))
{
System.out.println(" Contains Out :" + " " + linkText);
nextLink = link;
}
if(linkText.equals("Next?"))
{
System.out.println(" Equals Out :" + " " + linkText);
nextLink = link;
}
这是输出:
Contains Out : Next?
正如您在控制台输出中看到的那样,linkText
的值为Next?
。
在这种情况下,equals()
是不是真的?
如果阻止,则更改了两个消息。 equals()也表现出相同的行为。
答案 0 :(得分:2)
您正在与equalsIgnoreCase(...)
进行比较,它将忽略大小写,但只匹配相等长度的字符串,但使用contains(...)
进行搜索,不会忽略大小写,并且会匹配主字符串中的子字符串。
答案 1 :(得分:0)
str.equalsIgnoreCase(string)
检查char序列是否包含在字符串中。
String linkText = link.text().trim();
if(linkText.toLowerCase().contains() ("Next?".toLowerCase())){
System.out.printf(" * a ===> : <%s> (%s)\n", link.attr("abs:href"), link.text());
nextLink = link;
}
if(linkText.contains ("Next")){
System.out.printf(" * a ===> : <%s> (%s)\n", link.attr("abs:href"), link.text());
nextLink = link;
}
检查两个字符串是否相等,忽略大小写。
如果您想检查链接中是否包含文本,请尝试此操作:
String linkText = link.text().trim();
if(linkText.equals("Next?"){
System.out.printf(" * a ===> : <%s> (%s)\n", link.attr("abs:href"), link.text());
nextLink = link;
}
if(linkText.equals("Next")){
System.out.printf(" * a ===> : <%s> (%s)\n", link.attr("abs:href"), link.text());
nextLink = link;
}
如果您想检查文本是否与链接相同,请尝试此操作:
"Next?"
在此代码中,我检查小写的{{1}}是否包含在小写的完整网址中。