📄 englishfile.java
字号:
import java.util.*; //导入需要的包
import java.io.*;
import java.util.regex.*;
public class EnglishFile{ //定义一个类
private String str; //定义类属性,接收输入文件名
public EnglishFile(){
this.str="abc"; //无参构造方法对str初始化
}
public EnglishFile(String str){ //有参构造方法
this.str=str;
}
public String get_str(){ //获得文件名
return this.str;
}
public void set_str(String str){ //设置文件名
this.str=str;
}
public void count()throws myExecption,Exception{ //定义处理文本的方法
String xg; //存储文件名
Map map=new TreeMap(); //创建相联集合,键是字符串,键所对应(映射)的值为字符串数
String name=get_str(); //获取属性值就是文件名
File filename=new File(name);
if(!filename.exists()||!filename.isFile()||!filename.canRead()) //对文件进行判断
throw new myExecption(this); //出现异常,马上抛出让外层捕获
else //否则,正常处理
{
FileReader str=new FileReader(filename); //建立文件流
BufferedReader line=new BufferedReader(str); //包装一下文件流
while((xg=line.readLine())!=null) //读取输入文件中的每一行
{
//创建正则表达式匹配模式,匹配字符串(包括标点符号,单词和数字)
Pattern p=Pattern.compile("[^\\w+&&[^\\s]]|\\w+|\\d+");
Matcher matcher=p.matcher(xg); //使用匹配类与模式相联
//对每一行根据模式寻找相应的符号,单词或是数字进行匹配,把它们全部集合map
while(matcher.find()) //找到(肯定能找到但要判断是否已存在于集合中)
{
String word=matcher.group(); //从匹配中截获匹配到的字符串
Object o=map.get(word); //获取相应键(即字符串)的对应值(即个数值)
//如果没有与此字符串对应的条目(即个数),则增加一个
if(o==null)
{
map.put(word,new Integer(1));
}
//否则,将此字符串的个数(即它对应的值)增加1
else
{
Integer count=(Integer)o; //还原类型才可使用
//键(即字符串)不变,其个数增加1
map.put(word,new Integer(count.intValue()+1));
}
}
//获得集合的所有键(List 是存放Object类的),并存入数组
List keys=new ArrayList(map.keySet());
//利用通用的迭代器获取每个一个键
Iterator iterator=keys.iterator();
System.out.println("某单词或标点符号-->:此单词或标点符号个数");
while(iterator.hasNext()) //还有下一个键时
{
Object key=iterator.next(); //取一个键
//输出键(字符串)以及键对应的值(个数)
System.out.println("'"+key+"'-->:"+map.get(key));
}
//创建只匹配单词的模式
Pattern p1=Pattern.compile("[a-zA-Z]+");
Matcher matcher1=p1.matcher(xg);
int i=0; //用于记录单词个数
while(matcher1.find()) //找到一个就增加1
{
i++;
}
System.out.println("单词总数为: "+i); //输出单词总数
}
line.close(); //关闭文件流
}
}
}
class myExecption extends Exception{ //自定义异常类
EnglishFile file;
public myExecption(EnglishFile f)
{
super();
file=f;
}
public String toString()
{
//输出发生异常时的异常信息
return"文件"+file.toString()+"不存在或不可读又或者是目录";
}
}
class TestEnglishFile{ //定义测试类
public static void main(String args[]) throws IOException{ //向外层抛出异常
EnglishFile file=new EnglishFile("abc"); //利用构造方法初始化
//从标准输入(键盘)接收文件名,并为输入流做了一下包装
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input the filepath:");
String path=br.readLine();
file.set_str(path); //传送文件名
try{ //捕获可能的异常
file.count(); //调用方法
}
catch(myExecption e){
System.out.println(e);
}
catch(Exception e){
System.out.println("其他错误");
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -