java找出txt文本中最长/最短的句子,出现次数最多的句子,求平均句长,方差

找出文本中最长/最短的句子,出现次数最多的句子,求平均句长,方差。

思路:

(1)将文本按特定的方式进行切分(本文以。!?切分;

(2)创建两个数组,数组1存放切分后每句话的长度,数组2存放切分后的每句话;

(3)找最长句只需找到数组1中长度最长那一个,即可输出,最短同理;次数最多句子则需要遍历所有句子,找到相同的句子,对应的次数加1,最后输出次数最多那一个即可。

(4)总字符长度除以总句子数即平均句长;

(5)方差公式:
s 2 = ( ( x 1 − x ) 2 + ( x 2 − x ) 2 + ( x 3 − x ) 2 + . . . + ( x n − x ) 2 ) / n s^2=((x_1-x)^2+(x_2-x)^2+(x_3-x)^2+...+(x_n-x)^2)/n s2=((x1x)2+(x2x)2+(x3x)2+...+(xnx)2)/n
代码如下:

//文件名:Length.java
import java.io.*;
import java.util.*;
class Length
{
	public static void max(int a[],String mystr[])
	{
		int max=a[0];//令a[0]为max
		for(int i=0;i<a.length;i++)//找出最大的a[i]为max
		{
			if(a[i]>max)
			{
				max=a[i];
			}
		}
		for(int i=0;i<a.length;i++)//找出长度最长的句子
		{
			if(a[i]==max)
			{
				System.out.println("长度最长的:"+mystr[i]+"     共"+max+"字符");//输出长度最长的句子
			}
		}
	}
	public static void min(int a[],String mystr[])
	{
		int min=a[0];//令a[0]为min
		for(int i=0;i<a.length;i++)//找出最小的a[i]为min
		{
			if(a[i]<min&&a[i]>0)
			{
				min=a[i];
			}			
		}
		int j=0;
		for(int i=0;i<a.length;i++)//找出长度最短的句子
		{
			if(a[i]==min)
			{				
				System.out.println("长度最短的:"+mystr[i]+"     共"+min+"字符");//输出长度最短的句子	
			}
		}
	}
	public static void nums(String mystr[])
	{
		int[] a=new int[mystr.length];//令数组a为每个句子长度
		for(int i=1;i<mystr.length;i++)//给a[1]、a[2]、a[3]...赋值为1
		{
			a[i]=1;
		}
		for(int i=1;i<mystr.length;i++)//找出相同句子的次数
		{
			for(int j=i-1;j>=0;j--)//遍历所有的句子
			{
				if(mystr[i].equals(mystr[j]))//判断两个句子是否相同,相同则a[i]+1
					a[i]++;
			}
		}
		int max=a[0];//令a[0]为max
		for(int i=0;i<a.length;i++)//找出最大的a[i]为max
		{
			if(a[i]>max)
				max=a[i];
		}
		for(int i=0;i<a.length;i++)//找出出现次数最多的句子
		{
			if(a[i]==max)
				System.out.println("\n出现次数最多的:"+mystr[i]+"   共"+max+"次");
		}
	}
	public static void main(String[] args) throws Exception
	{
		long startTime = System.currentTimeMillis();	//定义一个开始时间
		File file = new File(args[0]);//创建一个文件对象
		BufferedReader br=new BufferedReader(new FileReader(file));  定义字符读取流
		String value = null; 							//定义一个临时接收文件中的字符串变量
        String newValue ="";    						//接收文件中所有字符串的变量
		int sum=0;
        while((value = br.readLine())!= null)			//开始读取文件中的字符
		{    	 	
			newValue = newValue + value;    			//存入newValue变量中
        }
		String[] mystr=newValue.split("。|!|?");//以句号/感叹号/问号分句
		int[] a=new int[mystr.length];//文本的长度放在数组中
		for(int i=0;i<mystr.length;i++)//给a[0]、a[1]、a[2]...赋值为0
		{
			a[i]=0;
		}
		for(int i=0;i<mystr.length;i++)//令a[i]等于每个字符串的长度
		{
			a[i]=mystr[i].length();
			sum=a[i]+sum;//求字符串的总长度
			//System.out.println(a[i]);//输出每个句子的字长
		}
		double x=(double)sum/(double)mystr.length;//平均句长
		double xx=0.0,s=0.0;
		System.out.println("平均句长"+x);
		for(int i=0;i<mystr.length;i++)
		{
			xx=Math.pow((a[i]-x),2)+xx;    //求n的平方:Math.pow(n,2)
		}
		s=xx/mystr.length;//求方差
		System.out.println("方差:"+s);
		max(a,mystr);//调用max找出长度最长的句子
		min(a,mystr);//调用max找出长度最短的句子
		nums(mystr);//调用nums找出出现次数最多的句子
		long endTime = System.currentTimeMillis();		//定义一个结束时间
		System.out.println("\n耗时:" + (endTime - startTime) + "毫秒");//输出所用时间
	}
}

结果如下:

(test.txt)
在这里插入图片描述
在这里插入图片描述

(西游记.txt)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值