Java实现统计文档中关键字出现的次数

目录
  • 1.实现URL文档的拷贝
  • 2.实现关键词在文档的查询功能
  • 3.显示效果

该代码简易实现了获取URL地址后对文档进行关键字统计的功能。具体的自己看吧

1.实现URL文档的拷贝

import java.util.Scanner;
import java.util.regex.Pattern;
import java.net.*;
import java.io.*;
import javax.swing.*;
import javax.swing.UIManager;
import java.awt.*;
import javax.swing.plaf.FontUIResource;
public class TestURL {

	static String getUserKeyWords=null;  //获取用户选择的关键词

	public static void main(String[] args) {
		File copyfile=new File("D:/newTest.txt");
		InputStream in=null;
		BufferedReader br=null;    //字符流写入
		BufferedWriter out=null;   //字符流写出
		String urladdress=null;  //获取用户输入的URL地址

		try
		{
			UIManager.put("JOptionPane.messageFont",new FontUIResource(new Font("宋体",Font.BOLD,20)));
			String getUserURL=JOptionPane.showInputDialog(null,"URL地址:\n","输入URL地址",JOptionPane.PLAIN_MESSAGE);
			String urlAddr=getUserURL.substring(getUserURL.lastIndexOf("/"));
			copyfile=new File("D:/"+urlAddr);
			getUserKeyWords=JOptionPane.showInputDialog(null,"关键字查询:\n","关键字",JOptionPane.PLAIN_MESSAGE);
			//URL url=new URL("http://news.cctv.com/2019/06/19/ARTIhqziOpWz2COTyHFW063b190619.shtml");  //获取URL地址
			URL url=new URL(getUserURL);  //获取URL地址
			HttpURLConnection urlC=(HttpURLConnection)url.openConnection();  //由URL获取URLConnection对象
			in=urlC.getInputStream();  //获取urlC的输入流
			br=new BufferedReader(new InputStreamReader(in,"UTF-8"));  //将url默认的字节流转成字符流,并以UTF-8的格式写入文档
			out=new BufferedWriter(new FileWriter(copyfile));  //将获取的信息写入到TestURL文档中
			String length=null;
			while ((length=br.readLine())!=null)
			{
				out.write(Html2Text(length));
				out.newLine();
			}
		}
		catch (Exception e)
		{
			e.getMessage();
		}finally{
			System.out.println("拷贝完成!");
			try{
			if (in!=null){in.close();}
			if (out!=null){out.close();}
			if (br!=null){br.close();}
			}catch(Exception ee){
				ee.getMessage();
			}
		}

		TextFileSearch search = new TextFileSearch();
		search.SearchKeyword(copyfile, getUserKeyWords);
	}   //程序到这就结束了 ,下面是不同方法实现对html的剔除功能,可以忽略

	//从html中提取纯文本  ,这部分其实没什么用,最开始想截取html中的字符串,后面检查也没啥用,就没删除,保留着
	public static String Html2Text(String inputString) {
		String htmlStr = inputString; // 含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.replaceAll("(?m)^\\s*$(\\n|\\r\\n)", "");
		return textStr;// 返回文本字符串
	}

	 /*//从html中提取纯文本,这个部分是简易实现html剔除,只能部分筛选
	 public static String stripHT(String strHtml){
		 String txtcontent = strHtml.replaceAll("</?[^>]+>", ""); //剔出<html>的标签
         txtcontent = txtcontent.replaceAll("<a>\\s*|\t|\r|\n</a>", "");//去除字符串中的空格,回车,换行符,制表符
         return txtcontent;
    }*/

/* //这个是利用java自带的类实现html剔除功能,基本上没怎么用,这部分可以忽略
import java.io.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class Html2Text extends HTMLEditorKit.ParserCallback {
	 StringBuffer s;

	 public Html2Text() {}

	 public void parse(Reader in) throws IOException {
	   s = new StringBuffer();
	   ParserDelegator delegator = new ParserDelegator();
	   // the third parameter is TRUE to ignore charset directive
	   delegator.parse(in, this, Boolean.TRUE);
	 }

	 public void handleText(char[] text, int pos) {
	   s.append(text);
	 }

	 public String getText() {
	   return s.toString();
	 }

	 public static void main (String[] args) {
	   try {
	     // the HTML to convert
		 //Reader in=new StringReader("string");
	     FileReader in = new FileReader("java-new.html");
	     Html2Text parser = new Html2Text();
	     parser.parse(in);
	     in.close();
	     System.out.println(parser.getText());
	   }
	   catch (Exception e) {
	     e.printStackTrace();
	   }
	 }
}*/

}

2.实现关键词在文档的查询功能

import java.io.Closeable;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import javax.swing.UIManager;
import javax.swing.*;
import java.awt.*;
import javax.swing.plaf.FontUIResource;

/**
 * 对文本文件的关键词进行搜索
 */
public class TextFileSearch {
	TestURL tt;
	public void SearchKeyword(File file,String keyword) {
		//参数校验
		verifyParam(file, keyword);

		//行读取
		LineNumberReader lineReader = null;
		try {
			lineReader = new LineNumberReader(new FileReader(file));
			String readLine = null;
			int times = 0;//出现的次数
			while((readLine =lineReader.readLine()) != null){
				//判断每一行中,出现关键词的次数
				int index = 0; //获得readLine的对象值
				int next = 0;  //定义开始查找关键字的序列号
				//int times = 0;//出现的次数
				//判断次数
				while((index = readLine.indexOf(keyword,next)) != -1) {  //从每行的第0个索引开始遍历关键字
					next = index + keyword.length();  //下一次的遍历序号为序列号+关键字长度
					times++;//次数加1
				}
				/*if(times > 0) {
					//System.out.println("第"+ lineReader.getLineNumber() +"行" + "出现 "+keyword+" 次数: "+times);
				}*/
			}
			if (times>0)
			{
				UIManager.put("JOptionPane.messageFont",new FontUIResource(new Font("宋体",Font.BOLD,20)));
				JOptionPane.showMessageDialog(null,"关键字"+"@"+tt.getUserKeyWords+"@"+"共有"+times+"个");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关闭流
			close(lineReader);
		}
	}

	/**
	 * 参数校验
	 */
	private void verifyParam(File file, String keyword) {
		//对参数进行校验证
		if(file == null ){
			throw new NullPointerException("the file is null");
		}
		if(keyword == null || keyword.trim().equals("")){
			throw new NullPointerException("the keyword is null or \"\" ");
		}

		if(!file.exists()) {
			throw new RuntimeException("the file is not exists");
		}
		//非目录
		if(file.isDirectory()){
			throw new RuntimeException("the file is a directory,not a file");
		}

		//可读取
		if(!file.canRead()) {
			throw new RuntimeException("the file can't read");
		}
	}

	/**
	 * 关闭流
	 */
	private void close(Closeable able){
		if(able != null){
			try {
				able.close();
			} catch (IOException e) {
				e.printStackTrace();
				able = null;
			}
		}
	}

}

3.显示效果

URL地址获取效果图

关键字查询界面

查询后效果图

到此这篇关于Java实现统计文档中关键字出现的次数的文章就介绍到这了,更多相关Java关键字次数内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java实现统计字符串出现的次数

    本文实例为大家分享了vuJava实现统计字符串出现次数的具体代码,供大家参考,具体内容如下 需求: 健盘录入一个字符串,要求统计字符串中每个字符串出现的次数. 举例:键盘录入"aababcabcdabcde" 在控制台输出: "a(1)b(4)c(3)d(2)e(1)" 思路: ①健盘录入一个字符串 ②创建HashMap集合,键是Character, 值是Integer ③遍历字符申,得到每一个字符 ④拿得到的每一个字符作为键到HashMap集合中去找对应的值,看其

  • Java案例使用集合方法实现统计任意字符串中字符出现的次数

    需求:键盘录入一个字符串,统计其中各个字符出现的顺序 分析: 1.使用Scanner类获取一个字符串 2.创建HashMap集合,如果追求统计字符的美观性,可以使用TreeMap 3.遍历字符串得到每一个字符并将其作为TreeMap的键 4.通过键去集合中找相对应的值,看返回值是什么? 返回null:说明该字符在集合中不存在,就将该字符为键,次数1为值进行存储 返回的不是null:说明该字符在集合中存在,就再次将该字符作为键,次数+1为值进行存储 5.遍历集合 public class Tree

  • java统计字符串中重复字符出现次数的方法

    本文实例讲述了java统计字符串中重复字符出现次数的方法.分享给大家供大家参考,具体如下: package com; import org.junit.Test; /** * 统计一个字符串的重复字符出现的次数 * * @author zdw * */ public class StringTest { @Test public void test() { String s = "fdfaacceeeeeeeeeeeegghikkkkkoooo"; count(s); } public

  • Java获取指定字符串出现次数的方法

    Java中 获取指定字符串在另一个字符串中出现的次数,供大家参考,具体内容如下 /** * @param args */ public static void main(String[] args) { String srcText = "Hello World"; String findText = "e"; int num = appearNumber(srcText, findText); System.out.println(num); } /** * 获取

  • java统计字符串中指定元素出现次数方法

    本文实例讲解了统计文本中某个字符串出现的次数或字符串中指定元素出现的次数方法,分享给大家供大家参考,具体内容如下 运行效果图: 程序查找的上此文件带"a"的字符在多少次 具体代码如下 package com.zuidaima.util.string; import java.io.*; public class CountString { public static int count(String filename, String target) throws FileNotFoun

  • java文件如何统计字母出现的次数和百分比

    这篇文章主要介绍了java文件如何统计字母出现的次数和百分比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 主要是文件的读写.先在代码中导入文件.一行一行的进行数据的读入,通过" "空格对读入的信息进行分割,存入到数组里之后对于每一个单词的每一个字母进行区分存入相应的字母数组里.最后统计总的字母个数.应用于百分比. package com.keshangone; import java.io.File; import java.uti

  • Java实现统计文档中关键字出现的次数

    目录 1.实现URL文档的拷贝 2.实现关键词在文档的查询功能 3.显示效果 该代码简易实现了获取URL地址后对文档进行关键字统计的功能.具体的自己看吧 1.实现URL文档的拷贝 import java.util.Scanner; import java.util.regex.Pattern; import java.net.*; import java.io.*; import javax.swing.*; import javax.swing.UIManager; import java.a

  • Java 在 Word 文档中使用新文本替换指定文本的方法

    创作一份文案,经常会高频率地使用某些词汇,如地名.人名.人物职位等,若表述有误,就需要整体撤换.文本将介绍如何使用Spire.Doc for Java,在Java程序中对Word文档中的指定文本进行替换. 工具/原料 Free Spire.Doc for Java(免费版) IntelliJ IDEA Jar文件获取及导入 方法1:先从官网下载jar包. 导入步骤: 下载后,解压文件,并将lib文件夹下的Spire.Doc.jar文件导入java程序.参考如下导入效果: 方法2:可通过maven

  • Java 在Word文档中添加艺术字的示例

    与普通文字相比,艺术字更加美观有趣也更具有辨识度,常见于一些设计精美的杂志或宣传海报中.我们在日常工作中编辑Word文档时,也可以通过添加艺术字体来凸显文章的重点,美化页面排版.这篇文章将介绍如何使用Free Spire.Doc for Java在word文档中添加艺术字并设置样式和效果. Jar包导入 方法一:下载Free Spire.Doc for Java包并解压缩,然后将lib文件夹下的Spire.Doc.jar包作为依赖项导入到Java应用程序中. 方法二:通过Maven仓库安装JAR

  • Java解析word,获取文档中图片位置的方法

    前言(背景介绍): Apache POI是Apache基金会下一个开源的项目,用来处理office系列的文档,能够创建和解析word.excel.ppt格式的文档. 其中对word文档的处理有两个技术,分别是HWPF(.doc)和XWPF(.docx).如果你对这两个技术熟悉的话,就应该能明白使用java解析word文档的痛楚所在. 其中两个最大的问题在于: 第一是这两个类并没有统一的父类和接口(隔壁的XSSF和HSSF投过来鄙视的眼光),所以没法进行同一格式的接口式编程: 第二是官方API中并

  • java 实现将一个string保存到txt文档中

    实例如下所示: private static String savefile = "E:\\test.txt"; private static void saveAsFileWriter(String content) { FileWriter fwriter = null; try { fwriter = new FileWriter(savefile); fwriter.write(content); } catch (IOException ex) { ex.printStack

  • Java 如何将表格数据导入word文档中

    Java 表格数据导入word文档中 个人觉得这个功能实在搞笑,没什么意义,没办法提了需求就要实现,(太好说话了把我) 我的实现是再word中生成一个与 excel行,列 一样的一个表格,然后把从excel拿到的数据(exList参数)依次放到word表格中 public static void createFile(HttpServletResponse response, String fileName, List<List<String>> exList) { try { s

  • asp.net下用Aspose.Words for .NET动态生成word文档中的数据表格的方法

    1.概述 最近项目中有一个这样的需求:导出word 文档,要求这个文档的格式不是固定的,用户可以随便的调整,导出内容中的数据表格列是动态的,例如要求导出姓名和性别,你就要导出这两列的数据,而且这个文档不是导出来之后再调整而是导出来后已经是调整过了的.看到这里,您也许马上想到用模板导出!而且.NET中自带有这个组件:Microsoft.Office.Interop.Word,暂且可以满足需求吧.但这个组件也是有局限性的,例如客户端必须装 office组件,而且编码复杂度高.最麻烦的需求是后面那个-

  • C#编程实现Excel文档中搜索文本内容的方法及思路

    打开Excel的VBA帮助,查看Excel的对象模型,很容易找到完成这个功能需要的几个集合和对象:Application.Workbooks.Workbook.Worksheets还有Worksheet和Range.Application创建Excel应用,Workbooks打开Excel文档,Workbook获得Excel文档工作薄,Worksheets操作工作表集合,Worksheet获得单个工作表. 搜索的思路对应上述集合和对象,可以这样表述:要搜索的文本可能存在Excel文档当中的某个工

  • Java 替换word文档文字并指定位置插入图片

    先说下 需要的依赖包 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.12</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <arti

  • 详解Java生成PDF文档方法

    最近项目需要实现PDF下载的功能,由于没有这方面的经验,从网上花了很长时间才找到相关的资料.整理之后,发现有如下几个框架可以实现这个功能. 1. 开源框架支持 iText,生成PDF文档,还支持将XML.Html文件转化为PDF文件: Apache PDFBox,生成.合并PDF文档: docx4j,生成docx.pptx.xlsx文档,支持转换为PDF格式. 比较: iText开源协议为AGPL,而其他两个框架协议均为Apache License v2.0. 使用PDFBox生成PDF就像画图

随机推荐