2011-10-13 27 views
0

我有String的列表。 List<String> elements= new ArrayList<String>(); 當我想添加新的字符串如何在java中自動重命名對象

elements.add(「element」);

與名稱是我的arraylist我想自動重命名爲_ [az ...]作爲窗口重命名文件,當有兩個相同的...所以例如我有arraylist「元素」時,我再次添加元素我想自動重命名爲element_a ...所以

if (elements.contains("element")) { 
    something 
} 

在java中是否有一些函數? thx求助

回答

1

沒有內置功能,但它不是太難。例如:

public static void main(String[] args) { 
    List<String> l = new ArrayList<String>(); 
    add("foo", l); 
    add("foo", l); 
    add("foo", l); 
    add("foo", l); 
    add("foo", l); 
    add("foo", l); 
    add("foo", l); 
    add("foo", l); 
    System.out.println(l); 
} 

static void add(String element, List<String> elements) { 
    if (elements.contains(element)) { 
     elements.add(nextValudFor(element, elements)); 
    } else { 
     elements.add(element); 
    } 
} 

static String nextValudFor(String element, List<String> elements) { 
    for (char c = 'a'; c <= 'z'; c++) { 
     String next = element + '_' + c; 
     if (!elements.contains(next)) { 
      return next; 
     } 
    } 
    throw new IllegalStateException("Ran out of letters!"); 
} 

輸出:

[foo, foo_a, foo_b, foo_c, foo_d, foo_e, foo_f, foo_g] 

爲了達到最佳效果,你可能想包裝這件事到您自己的列表類型爲合適。

+0

thx很多我試試這個解 – hudi

3

那麼你可以製作自己的擴展ArrayList的列表,覆蓋add(...)方法並首先檢查字符串是否已經存在於列表中(super.contains(...))然後根據需要重新命名,然後像往常一樣添加它(super.add(...))。

+2

我認爲你的意思是「覆蓋」。 –

+0

是的,我這樣做(注意自己:午夜後停止回答:))。並記錄:這不是「重命名」的對象,你只是改變存儲在一個字符串中的值(你實際上創建一個新的字符串對象,因爲字符串是不可變的) –