2017-07-14 52 views
0

我想從字符串中刪除兩者之間的一些模式 「/」 一個特定的字符串之前,例如:卸下一些模式使用Java

輸入
/DT_Gateway/gateway/ACC/input/..

輸出
/DT_Gateway/gateway/ACC

我試過寫這段代碼,bu不會發生錯誤。我是Java新手,請幫忙。

public class cut { 

    public static void main(String[] args) { 
     String myString = "/DT_Gateway/gateway/ACC/input/.."; 
     String newString = myString.substring(myString.lastIndexOf("/")+1, myString.indexOf("/..")); 
     System.out.println(newString); 
    } 

} 
+0

您能否舉一些更多的輸入和預期輸出示例?您提供的一個似乎沒有說明按照您的要求在兩個斜線之間移除某個東西。 – jsheeran

+1

如果這是一個文件路徑,你可以使用'File'來清除'.'和'..'文件夾... –

+0

你是什麼意思的「...得到錯誤」?請分享您收到的任何錯誤消息,或解釋什麼不起作用。 –

回答

0

注:這是一個非常定製解決您的問題,不是一般的辦法做到這一點。

String myString = "/DT_Gateway/gateway/ACC/input/.."; 
      String newString = myString.substring(0, myString.indexOf("/i")); 
      System.out.println(newString); 
0

嘗試使用正則表達式此解決方案:

"/DT_Gateway/gateway/ACC/input/..".replaceAll("(/[^/]+){2}$", "") 

正則表達式基本上在字符串的末尾找到兩個以下圖案的

/[^/]+ 

這意味着正斜槓隨後無限數量的非正斜槓。

0

似乎相對路徑應歸一化,XXX/..刪除。

這將大大如下

String myString = "/DT_Gateway/gateway/ACC/input/.."; 
System.out.println(myString.replaceAll("/[^/]+/\\.\\.(/|$)", "$1")); 

String myString2 = "/DT_Gateway/gateway/ACC/input/../x.txt"; 
System.out.println(myString2.replaceAll("/[^/]+/\\.\\.(/|$)", "$1")); 

Path path = Paths.get(myString); 
System.out.println(path.normalize().toString()); 

Path path2 = Paths.get(myString2); 
System.out.println(path2.normalize().toString()); 


/DT_Gateway/gateway/ACC 
/DT_Gateway/gateway/ACC/x.txt 
/DT_Gateway/gateway/ACC 
/DT_Gateway/gateway/ACC/x.txt 

Java的路徑是 - 對(各種)文件系統 - 相當的工具。

尤其是因爲有XXX/../..