Java:lastIndexOf不能处理String数组

时间:2017-07-17 21:37:04

标签: java xpath lastindexof

我使用HtmlUnit从xpath中提取数据并使用:

String[] data = new String[10]; // number of columns

data[0] = page.querySelector(".sprop-product-heading").getTextContent().trim().toString();

数据[d] ......等等。

但是当我使用数据[0]作为lastIndexOf中的参数时,它返回-1。

int posProd = someList.toString().lastIndexOf(data[0]); //returns -1

但是当我使用“引用搜索词”作为lastIndexOf的参数时,它会返回确切的位置。

int posProd = someList.toString().lastIndexOf("Searched Words in quotations"); //returns the index position

我已经尝试将数据[0]保存在另一个变量上,但仍然没有用,它返回-1。

String prodname = String.valueOf(data[0]);
int posProd = someList.toString().lastIndexOf(prodname); //returns -1

如何在不使用“”的情况下将数据[0]用作lastIndexOf中的参数?

修改

示例:

data [0] =“Lorem Ipsum”

字符串someList =“一个长期存在的事实是,在查看其布局时,阅读器会被页面的可读内容分散注意力。使用Lorem Ipsum的一点是,它具有或多或少的正态分布字母,而不是使用'这里的内容,这里的内容',使它看起来像可读的英语。“

int posProd = someList.toString().lastIndexOf(data[0]); //returns -1

但是当我测试它时:

int posProd = someList.toString().lastIndexOf("Lorem Ipsum"); //returns the position

编辑2:

    List<HtmlDivision> productDesc = page.getByXPath("//div[@class='col-md-6 md-margin-bottom-10']//following-sibling::div");
    String productDescList = "";
    for(HtmlDivision prodName:productDesc){
        productDescList = productDescList.trim()+prodName.asText().trim();
    }
    System.out.println("productDescList: " +productDescList);
    String prodname = String.valueOf(data[0]);
    System.out.println("prodname: " +prodname.trim());
    int posProd = productDescList.toString().lastIndexOf(prodname);
    String cleanDesc = productDescList.substring(posProd, productDescList.length()-5);
    System.out.println("cleanDesc: " +cleanDesc);

https://prnt.sc/fwxc24

1 个答案:

答案 0 :(得分:0)

我发现了错误的位置。它取决于数据[0]的内容。

data[0] = page.querySelector(".sprop-product-heading").getTextContent().trim().toString();

输出数据[0]确实包含除字符串以外的其他内容。

根据shmosel的帮助:

System.out.println(Arrays.toString(data[0].toCharArray()));
System.out.println(Arrays.toString(data[0].getBytes()));

我们认识到它包含在字符串数组末尾添加的“非中断空格”。

这解决了它:How to trim no-break space in Java?

string.replaceAll("(^\\h*)|(\\h*$)","")