2014-11-24 57 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++; 
    }