WebParserFilter.java
上传用户:cctqzzy
上传日期:2022-03-14
资源大小:12198k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Java

  1. package chapter2;
  2. import java.io.*;
  3. import java.net.*;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. public class WebParserFilter { 
  8. private static String src_File_Path = "D:\workshop\ch2\htmlsrc.html";
  9. private static String dst_File_Path = "D:\workshop\ch2\puresrc.txt";
  10.  public static void main(String[] args) throws IOException {
  11.  
  12.         try { 
  13.         
  14.          ParserFilter();
  15.        } catch (IOException e) { 
  16.            System.err.println("下载失败,请检查输入地址是否正确。");  
  17.            System.exit(1);
  18.        } 
  19.   }
  20.  
  21.  public static void ParserFilter()  throws IOException {
  22.      try { 
  23.      int j = 0; 
  24.      boolean bflag = true;
  25.         boolean bContent = true;
  26.         StringBuffer sBuffer = new StringBuffer(8096*2); 
  27.         char[] cBuffer = new char[8096*2]; 
  28.         char[] dstBuffer = new char[8096*2]; 
  29.         int nCount = 0;
  30.         
  31.       File srcfile = new File(src_File_Path);
  32. FileReader fpReader = new FileReader(srcfile);
  33. File dstfile = new File(dst_File_Path);
  34. FileWriter fpWriter = new FileWriter(dstfile);
  35.      nCount = fpReader.read(cBuffer);
  36. for(int i = 0; i < nCount;i++)
  37.         {
  38.             if( bContent == false )
  39.             {
  40.                 if(cBuffer[i] == '>')
  41.                  bContent = true;
  42.                 else
  43.                     continue;
  44.             } else {
  45.                 if(cBuffer[i] == '<')
  46.                 {
  47.                  bContent = false;
  48.                     continue;
  49.                 } else if(cBuffer[i] == 'n' || cBuffer[i] == ' ' || cBuffer[i] == ' ' ||  cBuffer[i] == ' ')
  50.                 {
  51.                  continue;
  52.                 }else if(  cBuffer[i]   == '&' && cBuffer[i+1] == 'n' 
  53.                      && cBuffer[i+2] == 'b' && cBuffer[i+3] == 's' 
  54.                      && cBuffer[i+4] == 'p' && cBuffer[i+5] == ';')
  55.                 {
  56.                  i =i+5;
  57.                  continue;
  58.                 }
  59.                 
  60.                 dstBuffer[j++] = cBuffer[i];
  61.             }
  62.         }
  63. bflag = true;
  64. for(int m = 0; m < j; m++)
  65.         {   // 英文和数字不拆分
  66. if(    ( dstBuffer[m] <= 'Z' &&  dstBuffer[m] >= 'A' )
  67. || ( dstBuffer[m] <= 'z' &&  dstBuffer[m] >= 'a' ) 
  68. || ( dstBuffer[m] <= '9' &&  dstBuffer[m] >= '0' ))
  69. {
  70. if( bflag == false)
  71. {
  72. sBuffer.append(' ');
  73. }
  74. sBuffer.append(dstBuffer[m]);
  75. bflag = true;
  76. //sBuffer.append(' ');
  77. } else {
  78.   // 过滤标点符号
  79. if(    dstBuffer[m] == '、' || dstBuffer[m] == '|' 
  80. || dstBuffer[m] == '”'  || dstBuffer[m] == ':'
  81. || dstBuffer[m] == ';'  || dstBuffer[m] == '.')
  82. {
  83. sBuffer.append(' ');
  84. continue;
  85. }
  86. if( bflag == true)
  87. {
  88. sBuffer.append(' ');
  89. }
  90. // 中文字符用空格分离
  91. sBuffer.append(dstBuffer[m]);
  92. sBuffer.append(' ');
  93. bflag = false;
  94. }
  95.         }
  96. System.out.println(sBuffer.toString());
  97. fpWriter.write(sBuffer.toString());
  98. fpReader.close();
  99. fpWriter.close();
  100.      } catch (UnknownHostException e) {
  101.          System.err.println("无法访问指定主机."); 
  102.          System.exit(1);
  103.     } catch (IOException e) { 
  104.         throw e;
  105.     }  
  106.  }
  107. }