java运用HashMap类统计英文网站上单词与字母出现的次数,保存文件中

  • Post author:
  • Post category:java




前言

这个程序是java选修课的作业,网上找不到合适的代码,于是自己花费了大量时间整理资料,最后实现功能,有感自己的辛苦,和人民的需求,分享一下。




import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Scanner;
import java.util.Set;
import java.util.regex.Pattern;

程序所有引用的模块



网页爬取

public class Test6 {
   
	
	// 爬取网页源代码
	public void get_html(String urls) {
    
		 try {
   
	            //创建一个URL实例
	            URL url = new URL(urls);

	            try {
   
	                //通过URL的openStrean方法获取URL对象所表示的自愿字节输入流
	                InputStream str = url.openStream();
	                InputStreamReader str1 = new InputStreamReader(str,"utf-8");

	                //为字符输入流添加缓冲
	                BufferedReader br = new BufferedReader(str1);
	                String data = br.readLine();//读取数据
	                String html="";
	                while (data!=null){
   //循环读取数据
	                    html +=data;
	                    data = br.readLine();
	                }
	               // System.out.println(html); 
	                br.close();
	                str1.close();
	                str.close();
	                get_text(html);  // 执行get_text,获得正文
	            } catch (IOException e) {
   
	                e.printStackTrace();
	            }
	        } catch (MalformedURLException e) {
   
	            e.printStackTrace();
	        }
	    }
	

在这个函数中,我们爬取了网页的源代码,保存在html变量中,然后将html传入“get_text”函数中,经行文本提取。

注意编码格式,这里设置了编码为“utf-8”,不然会出现中文乱码。



文本提取

public void get_text(String text) throws FileNotFoundException {
   
		
		String htmlStr = text; // 含html标签的字符串
		String textStr = "";
		java.util.regex.Pattern p_script;
		java.util.regex.Matcher m_script;
		java.util.regex.Pattern p_style;
		java.util.regex.Matcher m_style;
		java.util.regex.Pattern p_html;
		java.util.regex.Matcher m_html;
		try {
   
			String regEx_script = "<[\\s]*?script[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?script[\\s]*?>"; // 定义script的正则表达式{或<script[^>]*?>[\\s\\S]*?<\\/script>
	        String regEx_style = "<[\\s]*?style[^>]*?>[\\s\\S]*?<[\\s]*?\\/[\\s]*?style[\\s]*?>"; // 定义style的正则表达式{或<style[^>]*?>[\\s\\S]*?<\\/style>
	        String regEx_html = "<[^>]+>"; // 定义HTML标签的正则表达式
	        p_script = Pattern.compile(regEx_script, Pattern.CASE_INSENSITIVE);
	        m_script = p_script.matcher(htmlStr);
	        htmlStr = m_script.replaceAll(""); // 过滤script标签
	        p_style = Pattern.compile(regEx_style, Pattern.CASE_INSENSITIVE);
	        m_style = p_style.matcher(htmlStr);
	        htmlStr = m_style.replaceAll(""); // 过滤style标签
	        p_html = Pattern.compile(regEx_html, Pattern.CASE_INSENSITIVE);
	        m_html = p_html.matcher(htmlStr);
	        htmlStr = m_html.replaceAll(""); // 过滤html标签
	        textStr = htmlStr;
	    } catch (Exception e) {
   System.err.println("Html2Text: " + e.getMessage()); }
		//剔除空格行
		textStr=textStr.replaceAll("[ ]+", " ");
		textStr=textStr



版权声明:本文为STARSG0d原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。