Jsoup返回字符串“”在等号(“”)上没有返回true

时间:2014-01-13 19:35:18

标签: java jsoup equals

当我碰到这个时,只是玩一下并从网站上拉出一些数据进行操作:

String request = "http://foo";
String data = "bar";

Connection.Response res = Jsoup.connect(request).data(data).method(Method.POST).execute();
Document doc = res.parse();
Elements all = doc.select("td");

for(Element elem : all){
    String test = elem.text();
    if(test.equals(" ")){
       //redefine  test to 0 and print it
    }
    else{
       //print it
}

相关网站的编码如下:

<td align="center">Henry</td>
<td>23</td>
<td align="center">Savannah</td>
<td>15</td></tr>
...
<td align="center"> </td>
<td> </td>
<td align="center">Jane</td>
<td>15</td></tr>

在我的for循环中,test永远不会重新定义。

我在Eclipse中调试过,String test显示为:

eclipse debug


修改

调试测试图表(0):

chartat0


org.jsoup.nodes.Element.text()说“返回未编码的文本,如果没有则返回空字符串”。我假设未编码的部分与此有关,但我无法弄明白。

我开了一个测试程序:

public static void main(String[] args) {
    String str = " ";
    if (str.equals(" ")){
        System.out.println("True");
    }
}

然后返回true。

是什么给出了?

1 个答案:

答案 0 :(得分:3)

我不知道您是否控制在响应正文中发送的HTML,或者您是否在浏览器的源页面或其他地方看到的

<td> </td>

但实际内容可能是

<td>&nbsp</td> // or &#160

其中&nbspnon-breaking space的HTML实体。

在java中,您可以将其表示为

char nbsp = 160;

因此,您可以检查两个char值,一个用于空间,另一个用于不间断空格。

请注意,可能还有其他代码点表示为空格。你需要知道你在寻找什么。