2014-11-24 78 views
0

我有一個包含文件名從一個給定的路徑列表,從列表中創建字母列表:Java的

fileNamesList 

,並從這個名單我想創建一個Alphabet list一樣,如果有文件名與A啓動然後添加到列表,並像這樣高達Z並以同樣的方式我想創建Numbers List0 to 9

所有這些字母和數字檢查是基於Starts with from the file name

如何在java中做到這一點。

最後AlphabetList will be like A B E F....ZNumbers list will be 1 2 3 9

感謝

回答

1

初始化AlphabetList後:

for (int i = 'A'; i <= 'Z'; i++) 
    for (fileName: fileNameList) { 
     if ((int)fileName.charAt(0) == i) { 
      AlphabetList.add((char)i); 
     } 
    } 
} 

你可以做類似的事情NumbersList

或者:

occurrences = new int[256]; 
for (fileName: fileNameList) { 
    occurrences[(int)fileName.charAt(0)] += 1; 
} 
for (int i = 'A', i <= 'Z'; i++) { 
    if (occurrences[i] > 0) { 
     AlphabetList.add((char)i) 
    } 
} 
for (int i = '0', i <= '9'; i++) { 
    if (occurrences[i] > 0) { 
     NumberList.add(i - '0') 
    } 
} 
+0

大和感謝。它給了我我想要的,並感謝它的工作有沒有更好的方式做到這一點,而不是內部循環?像遞歸 – 2014-11-24 05:45:54

+0

是的,還有另一種方法。我編輯它。 – msinghal 2014-11-25 02:41:38

1

可以使用HashMap<Character, List<String>>來存儲您的列表與字符鍵。這可以用於數字和字母的相同用途,但如果您出於某種原因需要將它們分開,則可以創建2個地圖。

private HashMap<Character, List<String>> alphabetList = new HashMap<>(); 

public void addFileName(String fileName) { 
    if(fileName.isEmpty()) { 
     return; 
    } 

    Character firstChar = Character.toUpperCase(fileName.charAt(0)); 

    List<String> storedList = alphabetList.get(firstChar); 
    if(storedList == null) { 
     storedList = new ArrayList<String>(); 
     alphabetList.put(firstChar, storedList); 
    } 
    storedList.add(fileName); 
} 
2

同樣可以爲數字添加邏輯以及

List alphabetList = new ArrayList(); 
    int alpha = (int)fileNameList.charAt(0); 

    while(alpha <= 90){ 
     alphabetList.add((char)alpha); 
     alpha++; 
    }