2014-10-06 43 views
0

我想將字符串數組複製到另一個字符串數組中。但是副本只能包含原始數組的每個字符串的一部分。在Java中使用正則表達式複製數組

例如,如果我們有

String[] originalArray = {"/data/test2/", "/data/test4/", "/data/dropbox/test5/"} 

我想複製陣列是

String[] copyArray = {"test2", "test4", "test5"} 

我的解決辦法是簡單地通過原始數組迭代,並使用正則表達式來獲取originalArray中字符串的最後一部分,並生成由這些值組成的copyArray。

上述方法是否有效,還是有更有效的解決方案呢?還有什麼正則表達式可以用於這種情況?我在做的方式似乎有點過於強硬。

理想情況下,我只是手動創建copyArray,但在這種情況下,originalArray的大小和精確的內容是未知的。

編輯

這似乎微不足道,但由於某種原因,它不工作。

我添加了正則表達式。它似乎在測試儀中工作,但它不能正常工作,因爲我想在程序中使用它。我首先將originalArray轉換爲帶有|的字符串附加爲正則表達式。

String pattern = "/\\w+(?=\\||$)/g"; 
String testArray = originalArray.replaceAll(pattern," "); 

但是,測試數組只是給我沒有應用正則表達式的原始連接字符串。

+0

在範圍上的Java 8這個問題? – Bohemian 2014-10-06 22:09:51

+0

不幸的是它不是。 8中有沒有對此有用的東西? – JavaChipMocha 2014-10-06 22:18:44

+0

是 - 查看我的回答 – Bohemian 2014-10-06 22:22:53

回答

2

最多的Java 7,您需要編寫一個循環,但Java 8引入流,其允許流暢單行溶液:

String[] names = Arrays.stream(originalArray) 
    .map(s -> s.replaceAll(".*/", "")) 
    .toArray(); 

最重要的一點是lambda expression通過使用正則表達式將路徑轉換爲名稱,以將所有內容替換爲包含最後一個空白的斜槓(有效地刪除它)。

1

你的方法很好。請注意,數組的長度總是通過其length字段而知曉。您應該使用new String[originalArray.length]創建副本。

1

如果是字符串,你可以加入它使用類似|,然後申請一個RexEx整個字符串像數組:

/\w+(?=\||$)/g 

Online Demo

+0

如果你看到我編輯過的文章,我在我的字符串上試過了,並且它不能用作演示。任何想法爲什麼? – JavaChipMocha 2014-10-07 00:02:34

1

有沒有必要使用這個簡單的要求正則表達式。只需使用String#lastIndexOf()即可獲得最後/的索引,並使用String#substring()方法獲取所需的子字符串。

示例代碼:

String[] originalArray = {"/data/test2", "/data/test4", "/data/dropbox/test5"}; 
String[] copyArray=new String[originalArray.length]; 

for(int i=0;i<originalArray.length;i++){ 
    copyArray[i]=originalArray[i].substring(originalArray[i].lastIndexOf("/")+1); 
} 
1
String[] files(String[] originalArray) { 
    List<String> copy = new ArrayList<>(originalArray.length); 
    for (String s : originalArray) 
    copy.add(originalArray[idx].replaceFirst(".*([^/]*)$", "$1")); 
    return copy.toArray(new String[copy.size()]); 
}