[英]compare path in java
我將這些路徑存儲在數組列表中,如下所示:
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
必須返回,但它不! 請幫助我,並提前致謝。
好的,既然您在這里編輯了另一個答案:
首先,要獲得所有共享路徑,您必須在循環中進行比較,在最后一個斜線之后切割部分,直到沒有斜線為止:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.