2014-10-29 98 views
1

我必須誤會this。 鑑於下面的代碼,我期望有一個「他們匹配」的打印輸出。我得到「哎呀,不匹配」。Java Path.startswith()破壞?

  Path p = Paths.get("C:\\fakename"); 
      Path q = Paths.get("C:\\fake"); 
      if(p.startsWith(q)) 
      { 
      System.out.println("they match"); 
      } 
      else 
      { 
       System.out.println("oops. no match."); 
      } 

我誤解了什麼?文件看起來很清楚。

+0

對於像我這樣的人來說,讀「元素」並思考「字符串」的人,不要。它是在談論實際的路徑元素。哎呀。 :-) – kmort 2014-10-29 14:04:37

回答

7

我誤解了什麼?

好,文檔指出這一點:

這條道路給定的路徑開始後,如果這個路徑的根組件給定的路徑,的根組件開始,這條路徑具有相同名稱的開始元素作爲給定的路徑

而且fake是不一樣的名字元素fakename

+0

哦。咄。我正在做我的腦海中的字符串比較。謝謝大家! – kmort 2014-10-29 14:02:58

1

根據文檔您鏈接:

the path "foo/bar" starts with "foo" and "foo/bar". It does not start with "f" or "fo". 
1

但不夠清晰,明顯。

路徑比較檢查路徑元素級別,而不是字符串級別。

+0

新來java。仍然認爲在C. :-) – kmort 2014-10-29 14:11:48

1

它也不會在文件夾名稱上執行startsWith。他們不以相同的路徑開始,因此false

4

Path比較不是String比較。

String.startsWith取單個String參數表示您的目標中包含的任何String開頭。

Path.startsWith(String other) ...

測試此路徑與路徑,通過轉換給定的路徑串,在可完全按startsWith(路徑)方法指定的方式構造開始。例如,在UNIX上,路徑「foo/bar」以「foo」和「foo/bar」開頭。它不以「f」或「fo」開頭。

(引自API)。

+0

這將意味着'Path.get(「C:\\ dirA \\ dirB」)。startsWith(「C:\\ dirA」)== true'正確嗎? (澄清) – sircapsalot 2014-10-29 14:03:34

+1

@sircapsalot是的,這是準確的。我測試過了。 – kmort 2014-10-29 14:10:55

+0

@sircapsalot對不起是afk。 kmort說。 – Mena 2014-10-29 14:30:31

2

p和q來自類型「路徑」。如果你想使用startsWith(),你需要輸入「String」。

所以試試這個:

包newTestPackage.Contains;

import java.nio.file.Path; import java.nio.file。路徑;

公共類testwise {

public static void main(String[] args) { 
    Path p = Paths.get("C:\\fakename"); 
    Path q = Paths.get("C:\\fake"); 

    if(p.toString().startsWith(q.toString())) 
    { 
     System.out.println("they match"); 
    } 
    else 
    { 
     System.out.println("oops. no match."); 
    } 
} 

}

這裏它了我的第一個答案。我希望我能夠幫助你。 :-)

+0

是的,這是我認爲這是在我腦海中做的。謝謝。 :-) – kmort 2014-10-29 14:06:17