我使用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);
答案 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*$)","")