我将这些路径存储在arraylist中,如下所示:
html/body/div/header/div/div/a/span
html/body/div/div/div/div/div/div/div/div/div/h2
html/body/div/div/div/table/tbody/tr/td/ul/li/a/h2
html/body/div/div/div/table/tbody/tr/td/ul/li/a/h1
html/body/div/div/div/div/table/tbody/tr/td/a/span
html/body/div/div/div/div/table/tbody/tr/td/a/span/h1
html/body/div/div/div/div/table/tbody/tr/td/a/a/span/h1
我希望将每条路径与其他路径进行比较,并且最后只保留相似的路径, 我想要的结果是这样的:
html/body/div/div/div/table/tbody/tr/td/ul/li/a
html/body/div/div/div/div/table/tbody/tr/td/a/span
java代码是:
ArrayList<String> list_input = new ArrayList();
ArrayList<String> list_output = new ArrayList() ;
list_input.add("");
list_input.add("html/body/div/header/div/div/a/span");
list_input.add("html/body/div/div/div/div/div/div/div/div/div/h2");
list_input.add("html/body/div/div/div/table/tbody/tr/td/ul/li/a/h2");
list_input.add("html/body/div/div/div/table/tbody/tr/td/ul/li/a/h1");
list_input.add("html/body/div/div/div/div/table/tbody/tr/td/a/span");
list_input.add("html/body/div/div/div/div/table/tbody/tr/td/a/span/h1");
list_input.add("html/body/div/div/div/div/table/tbody/tr/td/a/a/span/h1");
for(int a=0; a<list_input.size(); a++)
{
String chemin = list_input.get(a);
for(int b=0; b<list_input.size(); b++)
if(a != b)
{
String chemin_comparé = list_input.get(b);
if(chemin_comparé.indexOf(chemin) != -1 && !list_output.contains(chemin))
list_output.add(chemin);
}
}
for(String chemin_disp: list_output)
System.out.println(chemin_disp);
但是这段代码只给出了这个结果:
html/body/div/div/div/div/table/tbody/tr/td/a/span
实际上也是
html/body/div/div/div/table/tbody/tr/td/ul/li/a
必须退回,但它是dosnt! 请帮助我,并提前感谢。
答案 0 :(得分:1)
好的,现在你在这里编辑了另一个答案:
首先,要获得所有共享路径,您必须在循环中进行比较,在最后一个斜线之后切割零件,直到没有斜线:
for(int a=0; a<list_input.size(); a++)
{
for(int b=0; b<list_input.size(); b++) {
String chemin = list_input.get(a);
if(a != b)
{
String chemin_comparé = list_input.get(b);
while(true) {
if(chemin_comparé.indexOf(chemin) != -1 && !list_output.contains(chemin))
list_output.add(chemin);
if(chemin.contains("/")) {
chemin = chemin.substring(0, chemin.lastIndexOf("/"));
} else {
break;
}
};
}
}
}
在比较以下内容时非常基本:
你必须检查:
确实
确实
...
我上面发布的代码确实如此,总是切掉最后一个斜线,直到没有剩下。
然而,现在你实际上拥有相同的所有路径, 包括只是“html”
因为你只想要“最长”的相等路径,你可以简单地再次过滤输出列表,删除子串/包含在其他列表元素中的元素:
final ArrayList<String> filteredOutputList = new ArrayList<>();
for (String string1 : list_output) {
boolean stringIsContainedInOtherString = false;
for (String string2 : list_output) {
if(!string2.equals(string1) && string2.contains(string1)) {
stringIsContainedInOtherString = true;
break;
}
}
if(!stringIsContainedInOtherString && !filteredOutputList.contains(string1)) {
filteredOutputList.add(string1);
}
}
for(String filteredOutput: filteredOutputList)
System.out.println(filteredOutput);