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

前言

这个程序是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
  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值