想了好久没有想出来。
问题描述:
从外部的文件读入单词,比如要读入的单词分别是:
abc ade ajho bi bg
...数据量比较大,怎样将读入的单词按首字母分组,分别存在各自的文件中。
比如:abc ade ajho为一组,存在 a.txt中;bi bg 为一组,存在b.txt中。
或者简单一点,您也可以把abc ade ajho存在一个数组或者容器a中,bi bg存在另一个容器b中?
问题描述:
从外部的文件读入单词,比如要读入的单词分别是:
abc ade ajho bi bg
...数据量比较大,怎样将读入的单词按首字母分组,分别存在各自的文件中。
比如:abc ade ajho为一组,存在 a.txt中;bi bg 为一组,存在b.txt中。
或者简单一点,您也可以把abc ade ajho存在一个数组或者容器a中,bi bg存在另一个容器b中?
然后判断首字母是否a ->a.txt
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();
}
}
}
第一个String:a,b,c
第二个:asdf,aaa,acd,,,可能不合理。
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(); }
}