A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 十七 中级黑马   /  2014-10-25 16:20  /  1392 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这段程序是把C:\\Documents and Settings\\admin\\桌面\\文件,这个文件夹下面的所有txt文件合并成一个txt文件C:\\Documents and Settings\\admin\\桌面\\文件\\output.txt。并去除其中的助词。但是程序没停下来,请高手指点指点{:2_32:}
  1. package com.venus.txttest;



  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileInputStream;
  6. import java.io.FileWriter;
  7. import java.io.IOException;
  8. import java.io.InputStreamReader;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.regex.Pattern;
  12. /*
  13. * 目的:
  14. *         合并文件的同时,去除一些不要的字,并输出行数
  15. */
  16. public class Merge {

  17.         public static final int BUFSIZE = 1024 * 1024 * 10;
  18.         private static String stopwords = "\\b(啊|阿|哎|哎呀|哎哟|唉|俺|俺们|按|按照|吧|吧哒|把|罢了|被|本|本着|" +
  19.                         "比|比方|比如|鄙人|彼|彼此|边|别|别的|别说|并|并且|不比|不成|不单|不但|不独|不管|不光|不过|不仅|不拘|不论|不怕|" +
  20.                         "不然|不如|不特|不惟|不问|不只|朝|朝着|趁|趁着|乘|冲|除|除此之外|除非|除了|此|此间|此外|从|从而|打|待|但|但是|当|当着|" +
  21.                         "到|得|的|的话|等|等等|地|第|叮咚|对|对于|多|多少|而况|而且|而是|而外|而言|而已|尔后|反过来|反过来说|反之|非但|非徒|" +
  22.                         "否则|嘎|嘎登|该|赶|个|各|各个|各位|各种|各自|给|根据|跟|故|故此|固然|关于|管|归|果然|果真|过|哈|哈哈|呵|和|何|何处|何况|何时" +
  23.                         "|嘿|哼|哼唷|呼哧|乎|哗|还是|还有|换句话说|换言之|或|或是|或者|极了|及|及其|及至|即|即便|即或|即令|即若|即使|几|几时|己|既|既然|既是|" +
  24.                         "继而|加之|假如|假若|假使|鉴于|将|较|较之|叫|接着|结果|借|紧接着|进而|尽|尽管|经|经过|就|就是|就是说|据|具体地说|具体说来|开始|开外|靠" +
  25.                         "|咳|可|可见|可是|可以|况且|啦|来|来着|离|例如|哩|连|连同|两者|了|临|另|另外|另一方面|论|嘛|吗|慢说|漫说|冒|么|每|每当|们|莫若|某|某个" +
  26.                         "|某些|拿|哪|哪边|哪儿|哪个|哪里|哪年|哪怕|哪天|哪些|哪样|那|那边|那儿|那个|那会儿|那里|那么|那么些|那么样|那时|那些|那样|乃|乃至|呢|能|" +
  27.                         "你|你们|您|宁|宁可|宁肯|宁愿|哦|呕|啪达|旁人|呸|凭|凭借|其|其次|其二|其他|其它|其一|其余|其中|起|起见|起见|岂但|恰恰相反|前后|前者|且|然而|" +
  28.                         "然后|然则|让|人家|任|任何|任凭|如|如此|如果|如何|如其|如若|如上所述|若|若非|若是|啥|上下|尚且|设若|设使|甚而|甚么|甚至|省得|时候|什么|什么样|" +
  29.                         "使得|是|是的|首先|谁|谁知|顺|顺着|似的|虽|虽然|虽说|虽则|随|随着|所|所以|他|他们|他人|它|它们|她|她们|倘|倘或|倘然|倘若|倘使|腾|替|通过|同|同时|哇|" +
  30.                         "万一|往|望|为|为何|为了|为什么|为着|喂|嗡嗡|我|我们|呜|呜呼|乌乎|无论|无宁|毋宁|嘻|吓|相对而言|像|向|向着|嘘|呀|焉|沿|沿着|要|要不|要不然|要不是|要么|" +
  31.                         "要是|也|也罢|也好|一|一般|一旦|一方面|一来|一切|一样|一则|依|依照|矣|以|以便|以及|以免|以至|以至于|以致|抑或|因|因此|因而|因为|哟|用|由|由此可见|由于|有|" +
  32.                         "有的|有关|有些|又|于|于是|于是乎|与|与此同时|与否|与其|越是|云云|哉|再说|再者|在|在下|咱|咱们|则|怎|怎么|怎么办|怎么样|怎样|咋|照|照着|者|这|这边|这儿|这个" +
  33.                         "|这会儿|这就是说|这里|这么|这么点儿|这么些|这么样|这时|这些|这样|正如|吱|之|之类|之所以|之一|只是|只限|只要|只有|至|至于|诸位|着|着呢|自|自从|自个儿|" +
  34.                         "自各儿|自己|自家|自身|综上所述|总的来看|总的来说|总的说来|总而言之|总之|纵|纵令|纵然|纵使|遵照|作为|兮|呃|呗|咚|咦||喏|啐|喔唷|嗬|嗯|嗳)\\b";
  35.         private static final Pattern reStopwords = Pattern.compile(stopwords,Pattern.CASE_INSENSITIVE);
  36.         private static final Pattern rePunctuation = Pattern.compile("[^\\p{L}\\p{N}]"); // L:Letter, N:Number
  37.         private static final Pattern reSpaceOrAnderscore = Pattern.compile("(_|\\s)+");
  38.         private static final Pattern  Letters =Pattern.compile("[a-zA-Z]");
  39. //        private static final Pattern  Letters =Pattern.compile("^soft tissue 2APE$");
  40.         private static final Pattern  Digits =Pattern.compile("[0-9]");

  41.         public static String TransformString(String str) {
  42.                 String first = null;
  43.                 //remove stop words
  44.                 String stopWdRemoved = reStopwords.matcher(str).replaceAll(" ");
  45.                 //remove punctuation
  46.                 String punctRemoved = rePunctuation.matcher(stopWdRemoved).replaceAll(" ");
  47.                 //remove more spaces
  48.                 String lettersRemoved = Letters.matcher(punctRemoved).replaceAll(" ");
  49.                 String digitsRemoved = Digits.matcher(lettersRemoved).replaceAll(" ");
  50.                
  51.                 String moreSpaceRemoved=reSpaceOrAnderscore.matcher(digitsRemoved).replaceAll(" ");
  52.                 return moreSpaceRemoved;
  53.         }
  54.        
  55.         public static List<String> getFileNames(String direc){
  56.                 try{
  57.                         File file = new File(direc);
  58.                         File files[] = file.listFiles();
  59.                        
  60.                         List<String> list = new ArrayList<String>();
  61.        
  62.                         for (File f : files) {
  63.                                 list.add(f.getCanonicalPath());       
  64.                         }
  65.                         return list;
  66.                 }catch(Exception e){
  67.                         e.printStackTrace();
  68.                 }
  69.                 return null;
  70.         }
  71.        
  72.        
  73.        
  74.         public static void mergeFiles(String outFile, String direc) {
  75.                
  76.                 List<String> fileNames = getFileNames(direc);
  77.                
  78.                 BufferedWriter bw = null;
  79.                 BufferedReader br = null;
  80.                
  81.                 try {
  82.                         bw = new BufferedWriter(new FileWriter(outFile));
  83.                        
  84.                         int i = 0;
  85.                         for (String f : fileNames) {
  86.                                
  87.                                 br = new BufferedReader(new InputStreamReader(new FileInputStream(f), "UTF-8"));
  88.                                
  89.                                 String line = null;
  90.                                 String result = new String();
  91.                                 while ((line = br.readLine())!=null) {
  92.                                        
  93.                                         result = TransformString(line).trim();
  94.                                         if(result.length()!=0) {
  95.                                                 bw.write(result);
  96.                                                 bw.newLine();
  97.                                                 bw.flush();
  98.                                                 System.out.println(i++ +"  " + result );
  99.                                                
  100.                                         }
  101.                                 }
  102.                                
  103.                         }
  104.                         // out.println("Merged!! ");
  105.                 } catch (IOException ioe) {
  106.                         ioe.printStackTrace();
  107.                 } finally {
  108.                         try {
  109.                                 if (bw != null) {
  110.                                         bw.close();
  111.                                 }
  112.                         } catch (IOException ignore) {
  113.                                 ignore.printStackTrace();
  114.                         }
  115.                 }
  116.         }
  117.        
  118.        
  119.        
  120.        

  121.         public static void main(String[] args) {
  122.                
  123.                 //调用此方法,只需要填写两个参数,第一个:输出至那个文件
  124.                 //                                                第二个:被读取文件所在的目录
  125.                 mergeFiles("C:\\Documents and Settings\\admin\\桌面\\文件\\output.txt", "C:\\Documents and Settings\\admin\\桌面\\文件");
  126.         }

  127. }
复制代码

1 个回复

倒序浏览
看到这么多代码,头都大了,菜鸟飘过。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马