2017-01-10 23 views
0

私はJavaプログラムに精通していません。 Java Pathの比較と文字列は以下のタスクを実行することができますか?文字列/パスの比較

Path a = Paths.get("C:/Folder/"); 
Path b = Paths.get("C:/Folder/abc/def/"); 



両方のパスの比較を行うとパスの両方の差分のみを取得するための任意の方法が持つことになります。たとえば、abを比較すると、/abc/def/が両方のパスとの主な違いであることを検出して新しい変数に格納できます。私はいくつかのコードをオンラインで検索しようとしましたが、残念ながらパスの類似性を判断して結果を返します。yesまたはnotのみ

+6

何か研究をしていましたか? ['Path#relativize()'](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Path.html#relativize-java.nio.file.Path-)を試してください。 –

+0

@ジムガリソン私はちょうど何かを学んだ。私はコアStringメソッドを使用して以下の答えを与えましたが、私はJavaがすでにこれをカバーしていると思います。 –

+0

これをhttp://stackoverflow.com/questions/204784/how-to-construct-a-relative-path-in-java-from-two-absolute-paths-or-urlsの複製としてマークするのはどうですか? –

答えて

1

StringUtilsApache Common APIからdiff stringまでです。ただ、結果は次のようになり

a.relativize(b) 

を使用

String a = Paths.get("C:/Folder/").toString(); 
String b = Paths.get("C:/Folder/...").toString(); 
String diff = StringUtils.difference(a, b); 
0

1つの方法は、一方のパスが他方のパスに含まれているかどうかを判断する方法です。その場合は、包含パスの余分な部分文字列を取ります。

public String findPathDiff(String patha, String pathb) { 
    String diff = ""; 

    if (pathb.contains(patha)) { 
     diff = pathb.substring(patha.length() - 1); 
    } 
    else if (patha.contains(pathb)) { 
     diff = patha.substring(pathb.length() - 1); 
    } 
} 

使用:

String patha = "C:/Folder/"; 
String pathb = "C:/Folder/abc/def/"; 
String diff = findPathDiff(patha, pathb); 
System.out.println(diff) 

二つの経路の間の差であるとして、この希望出力/abc/def/次のような方法を考えます。

0

StringUtils.difference("ab", "abxyz") = "xyz" 
StringUtils.difference("abcde", "abxyz") = "xyz" 
StringUtils.difference("abcde", "xyz") = "xyz" 

PathからStringを取得し、difference:ここ

は、ドキュメントからの例のいくつかであります: "abc \ def \"

0

StringUtils.difference(String a、String b)org.apache.commons.lang.StringUtilsを使用できます。

Path a = Paths.get("C:/Folder/"); 
Path b = Paths.get("C:/Folder/abc/def/"); 
System.out.println(StringUtils.difference(a.toString(),b.toString());