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

这篇博客介绍了一段Java程序,用于爬取网页、提取文本,并使用HashMap统计英文单词和字母的出现次数。程序包括网页爬取、文本提取、单词与字母统计等步骤,最终将结果保存到文件中。尽管存在一些问题,如无法正确处理某些特殊短语,但博主分享了完整的代码,供读者学习和改进。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

这个程序是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
首先,我们需要先了解HashMap的基本用法和特点,以及如何遍历Map。 HashMapJava中常用的一种Map实现,它是基于哈希表实现的,可以用来存储键值对。HashMap中的键和值都可以是任何型的对象,但是键不能重复,值可以重复。 遍历HashMap可以使用for循环和Iterator迭代器两种方式,具体实现可以参考以下代码: ```java import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HashMapExample { public static void main(String[] args) { // 创建一个HashMap对象 Map<String, Integer> map = new HashMap<>(); // 往HashMap中添加键值对 map.put("a", 1); map.put("b", 2); map.put("c", 3); // 使用for循环遍历HashMap for (String key : map.keySet()) { System.out.println(key + ": " + map.get(key)); } // 使用Iterator迭代器遍历HashMap Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, Integer> entry = iterator.next(); System.out.println(entry.getKey() + ": " + entry.getValue()); } } } ``` 接下来,我们可以通过HashMap统计单词中各字母出现的次数。具体实现可以参考以下代码: ```java import java.util.HashMap; import java.util.Map; public class WordCount { public static void main(String[] args) { String word = "hello world"; Map<Character, Integer> map = new HashMap<>(); for (int i = 0; i < word.length(); i++) { char c = word.charAt(i); if (map.containsKey(c)) { map.put(c, map.get(c) + 1); } else { map.put(c, 1); } } for (char key : map.keySet()) { System.out.println(key + ": " + map.get(key)); } } } ``` 运行结果如下: ``` h: 1 e: 1 l: 3 o: 2 : 1 w: 1 r: 1 d: 1 ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值