浏览 5632 次
锁定老帖子 主题:一个上机题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-02
输出:字数总数 排序后再输出 例如:文本的内容是:我爱大海,我爱蓝天 输出:字数总数是:6 排序后:出现1次:大 海 蓝 天 出现2次:我 爱 怎么实现呢? 急~~~~~~~~~~~~~~~~~~~~ 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-02
原题是什么?
排序后:出现1次:大 海 蓝 天 出现2次:我 爱 是让统计的么? |
|
返回顶楼 | |
发表时间:2009-04-02
无非就是统计每个字,第一次出现存起来,再出现,计数加1,
最后按出现次数来输出统计信息 两个问题: 1、文件足够大时,内存问题;中间信息存成文件,效率问题 2、文本中的“,”是怎么去掉的?? 符号都不统计吗?中文?英文? |
|
返回顶楼 | |
发表时间:2009-04-03
import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.HashMap; /** * 测试文件读取 * @author Administrator * */ public class FileTest { public static void main(String[] args){ try { FileInputStream fis = new FileInputStream("c:/test.txt"); byte[] bt =new byte[1024]; fis.read(bt); fis.close(); String filestr = new String(bt); filestr =filestr.trim(); HashMap HZ = new HashMap(); for(int i=0;i<filestr.length();i++){ String temp =filestr.substring(i,i+1); if(HZ.containsKey(temp)){ int cs =Integer.valueOf(HZ.get(temp).toString()); HZ.put(temp, cs+1); }else{ HZ.put(temp, 1); } } HZ.toString(); System.out.println(HZ.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
|
返回顶楼 | |
发表时间:2009-04-03
最后修改:2009-04-03
恩,怎么让我想起了MapReduce,只要是将MR原理的时候就总会引用这个经典case
|
|
返回顶楼 | |
发表时间:2009-04-03
package test.interview; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class TestFileHandler { public static void main(String[] args) { InputStream input = null; try { input = new FileInputStream(new File("f:\\test.txt")); int size = input.available(); byte[] content = new byte[size]; input.read(content); String tmp = new String(content, "UTF-8"); HashMap<Character, Integer> map = new HashMap<Character, Integer>(); for (int i = 0; i < tmp.length(); i++) { if (map.containsKey(tmp.charAt(i))) { Integer count = map.get(tmp.charAt(i)); map.put(tmp.charAt(i), count + 1); } else { map.put(tmp.charAt(i), 1); } } Set<Character> set = map.keySet(); Iterator<Character> it = set.iterator(); while (it.hasNext()) { Character word = (Character) it.next(); System.out.println("word is " + word + " , count is = " + map.get(word)); } } catch (Exception e) { e.printStackTrace(); } finally { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } 感觉这题完全是考API... |
|
返回顶楼 | |
发表时间:2009-04-03
最后修改:2009-04-03
aquleo 写道 package test.interview; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Set; public class TestFileHandler { public static void main(String[] args) { InputStream input = null; try { input = new FileInputStream(new File("f:\\test.txt")); int size = input.available(); byte[] content = new byte[size]; input.read(content); String tmp = new String(content, "UTF-8"); HashMap<Character, Integer> map = new HashMap<Character, Integer>(); for (int i = 0; i < tmp.length(); i++) { if (map.containsKey(tmp.charAt(i))) { Integer count = map.get(tmp.charAt(i)); map.put(tmp.charAt(i), count + 1); } else { map.put(tmp.charAt(i), 1); } } Set<Character> set = map.keySet(); Iterator<Character> it = set.iterator(); while (it.hasNext()) { Character word = (Character) it.next(); System.out.println("word is " + word + " , count is = " + map.get(word)); } } catch (Exception e) { e.printStackTrace(); } finally { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } 感觉这题完全是考API... 仁者见仁,智者见智 如果用shell作 每个字后加个回车 引用 我 爱 大 海 , 我 爱 蓝 天 先排序 引用 爱 爱 大 海 蓝 天 我 我 正则 引用 爱爱 我我 大 海 蓝 天 再正则 引用 2爱 1大 1海 1蓝 1天 2我 排序 ....... 循环 引用 2爱我 1大海蓝天 |
|
返回顶楼 | |
发表时间:2009-04-10
最后修改:2009-04-10
用正则匹配呢?
我写的。。 public class CountDemo1 { private static final int ONE = 1; public static void main(String[] args) throws IOException { Map charMap = new TreeMap(); StringBuffer sBuffer = new StringBuffer(); FileReader reader = new FileReader("c:\\1.txt"); BufferedReader br = new BufferedReader(reader); String str = null; String regex = "\\w+\\w|[\u4e00-\u9fa5]"; while ((str = br.readLine()) != null) { Matcher m = Pattern.compile(regex).matcher(str); while (m.find()) { String charactor = null; charactor = m.group().toLowerCase(); Integer count = (Integer) charMap.get(charactor); if (count == null) { count = 0; } charMap.put(charactor, ++count); } } br.close(); reader.close(); List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>( charMap.entrySet()); Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() { public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return (o2.getValue() - o1.getValue()); } }); System.out.println("一共有"+infoIds.size()+"個漢字或單詞"); for (int i = 0; i < infoIds.size(); i++) { String id = infoIds.get(i).toString(); Integer count = infoIds.get(i).getValue(); if (count >0 ) { System.out.println(id); } } } } |
|
返回顶楼 | |
发表时间:2009-04-10
最后修改:2009-04-12
用点面向对象思想:
package com.ib.test; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Scanner; public class TestPool { public static void main(String[] args) throws FileNotFoundException{ Scanner scan=new Scanner(new FileInputStream("f:/test.txt")); CharacterPool pool=new CharacterPool(); while(scan.hasNextLine()){ for(Character c:scan.nextLine().toCharArray()){ pool.write(c); } } System.out.println("字数总数是:"+pool.getCountSize()); int i=1; do{ System.out.print("出现"+i+"次:"); System.out.println(pool.toString()); pool=pool.getNext(); i++; }while(pool!=null); } } package com.ib.test; import java.util.LinkedList; import java.util.List; class CharacterPool { private List<Character> pool = new LinkedList<Character>(); private CharacterPool next=null; public void write(Character c){ if(c<'\u4e00'||c>'\u9fa5'){ return; } if(pool.contains(c)){ pool.remove(c); if(next==null){ next=new CharacterPool(); } next.write(c); }else{ pool.add(c); } } public CharacterPool getNext(){ return next; } public int getSize(){ return pool.size(); } public int getCountSize(){ return next==null?pool.size():pool.size()+next.getCountSize(); } @Override public String toString(){ return pool.toString(); } } |
|
返回顶楼 | |
发表时间:2009-06-04
哈哈,我出来了
|
|
返回顶楼 | |