2014-10-29 97 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