《Java》Java实现一个“以鹿鼎记文字内容为角度,分析主、配角亲密程度”的应用程序——原著的文本文件做数据源
【韦小宝和他的七个老婆】
韦小宝这个人是金庸笔下的唯一一个不会武功却又如鱼得水角色,身边有七个老婆相伴,他更是许多金庸迷羡慕的人:权势、地位甚至红颜知己。那么问题来了,七人中哪个是韦小宝最爱的,哪个又是最爱他的人呢?下面博主就从计算机的角度来为大家分析一下。
一、如何分析?
分析的思路很简单,就是将原著的文本文件作为数据源,通过程序来计算韦小宝分别和他的七位老婆出现在同一个句子中的次数,次数最多的即为韦小宝最爱,当然这是从文字的角度来谈的。
数据源 ldj.txt
:
二、编程思路
程序设计思路流程如下:
三、源程序
【contrast.java】
import java.io.*;
public class contrast { // 创建类
public static void main(String[] args) { // 主方法
int sum_end = 0; //总的句号(。)次数
int end_mark = 0; //句号(。)计次
int data_count = 0; //数据计次
boolean flag = true; //控制while循环的标志
int count[] = new int[7]; //计"主、配角出现次数"
//名字数据:阿珂、双儿、方怡、沐剑屏、曾柔、苏荃、建宁公主
int name[][] = {{38463,29634,0},{21452,20799,0},{26041,24609,0},
{27792,21073,23631},{26366,26580,0},{33487,33603,0},{24314,23425,0}};
File file = new File(args[0]); // 创建文件对象
int rom[] = new int[(int) file.length()]; //定于储存数据的数组
int data_rom[] = new int[(int) file.length()];
try {
FileReader fr = new FileReader(file); //创建FileReader类对象
// 创建BufferedReader类对象
BufferedReader bufr = new BufferedReader(fr); //创建BufferedReader类对象
for(int sum=0;sum<file.length();sum++) //循环读完整个文件
{
rom[sum] = bufr.read(); //"读"函数
if(rom[sum]==12290)
{
sum_end++; //总的句号数
}
}
while(flag)
{
int m = 0; //"韦小宝"标记符
int mark = 0;
int rl = 0;
int fl = (int) file.length();
for(int i=0;i<fl;i++) //以句号为结束标志每次读一句
{
data_rom[i] = rom[data_count];
data_count++;
if(data_rom[i]==12290)
{
fl = 1;
end_mark++;
}
rl = i+1;
}
for(int j=0;j<rl;j++) //判断此句子中是否出现"韦小宝"三个字
{
if(data_rom[j]==38886)
{
mark = j+1;
if(data_rom[mark]==23567)
{
mark += 1;
if(data_rom[mark]==23453)
{
m = 1;
}
}
}
}
for(int r=0;r<7;r++) //循环判断此句子中那几位"老婆"出现
{
int wm = 0; //"老婆"标记符
for(int k=0;k<rl;k++)
{
if(data_rom[k]==name[r][0])
{
mark = k+1;
if(data_rom[mark]==name[r][1])
{
mark += 1;
wm = 1;
if(name[r][2]!=0)
{
wm = 0;
if(data_rom[mark]==name[r][2])
{
wm = 1;
}
}
}
}
}
if(m==1 && wm==1) //主、配角同时出现就+1
{
count[r]++;
}
}
if(end_mark==sum_end) //读到最后一个句号就跳出while循环
{
flag = false;
}
}
System.out.println("\n韦小宝分别和他的七位妻子出现在同一句子中的次数:\n");
System.out.println("[韦小宝-阿珂]-------"+count[0]);
System.out.println("[韦小宝-双儿]-------"+count[1]);
System.out.println("[韦小宝-方怡]-------"+count[2]);
System.out.println("[韦小宝-沐剑屏]-----"+count[3]);
System.out.println("[韦小宝-曾柔]-------"+count[4]);
System.out.println("[韦小宝-苏荃]-------"+count[5]);
System.out.println("[韦小宝-建宁公主]---"+count[6]);
} catch (Exception e) { // 处理异常
e.printStackTrace();
}
}
}
四、分析结果
从结果可以看出,韦小宝和双儿出现在同一句子中的次数最多。
所以得出结论:在作者金庸笔下,韦小宝的最爱是“双儿”