想了好久没有想出来。
问题描述:
从外部的文件读入单词,比如要读入的单词分别是:
abc ade ajho bi bg
...数据量比较大,怎样将读入的单词按首字母分组,分别存在各自的文件中。
比如:abc ade ajho为一组,存在 a.txt中;bi bg 为一组,存在b.txt中。
或者简单一点,您也可以把abc ade ajho存在一个数组或者容器a中,bi bg存在另一个容器b中?

解决方案 »

  1.   

    一个一个读,没有遇到空格 则是同组的
    然后判断首字母是否a ->a.txt
      

  2.   


    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Map.Entry;public class StringTest
    { /**
     * @param args
     */
    public static void main(String[] args)
    {
    List<String> lstOriginal = new ArrayList<String>();
    lstOriginal.add("abc");
    lstOriginal.add("ade");
    lstOriginal.add("ajho");
    lstOriginal.add("bi");
    lstOriginal.add("bg");
    lstOriginal.add("ca"); Map<String, List<String>> map = new HashMap<String, List<String>>();
    for (String str : lstOriginal)
    {
    String start = str.substring(0, 1);
    if (map.containsKey(start))
    {
    map.get(start).add(str);
    }
    else
    {
    List<String> lstSorted = new ArrayList<String>();
    lstSorted.add(str);
    map.put(start, lstSorted);
    }
    }
    Iterator<Entry<String, List<String>>> it = map.entrySet().iterator();
    StringBuffer sb;
    while (it.hasNext())
    {
    sb = new StringBuffer();
    Entry<String, List<String>> entry = it.next();
    String key = entry.getKey();
    String filePath = System.getProperty("user.dir") + File.separator
    + key + ".txt";
    List<String> lstSorted = entry.getValue();
    for (String str : lstSorted)
    {
    sb.append(str);
    sb.append(" ");
    }
    restoreAsFile(filePath, sb.toString());
    }
    } public static void restoreAsFile(String filePath, String content)
    {
    File file = new File(filePath);
    try
    {
    if (!file.exists())
    {
    file.createNewFile();
    }
    FileOutputStream fout = new FileOutputStream(file);
    new PrintStream(fout).println(content);
    fout.close();
    }
    catch (FileNotFoundException e)
    {
    e.printStackTrace();
    }
    catch (IOException e)
    {
    e.printStackTrace();
    }
    }
    }
      

  3.   

    HashMap<String,List<String>>;
    第一个String:a,b,c
    第二个:asdf,aaa,acd,,,可能不合理。
      

  4.   

    你提到数据量比较大,如果怕内存不够,可以用多次文件操作来减少内存消耗:import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;public class StringTest2
    { /**
     * @param args
     * @throws IOException
     */
    public static void main(String[] args) throws IOException
    {
    List<String> lstOriginal = new ArrayList<String>();
    lstOriginal.add("abc");
    lstOriginal.add("ade");
    lstOriginal.add("ajho");
    lstOriginal.add("bi");
    lstOriginal.add("bg");
    lstOriginal.add("ca"); for (String str : lstOriginal)
    {
    sortAndStoreStr(str);
    } } public static void sortAndStoreStr(String str) throws IOException
    {
    String start = str.substring(0, 1);
    String filePath = System.getProperty("user.dir") + File.separator
    + start + ".txt";
    File f = new File(filePath);
    if (!f.exists())
    {
    f.createNewFile();
    } FileWriter fw = new FileWriter(f, true);
    PrintWriter pw = new PrintWriter(fw);
    pw.println(str);
    pw.close();
    fw.close(); }
    }