TextFile 类的创写

TextFile 作为自写的方法,继承自List<String>。像统计文本中出现的哪些单词,不重复等等,适合用Set集合完成统计。

 1 class TextFile extends ArrayList<String>{
 2         public static String read(String filename){
 3             StringBuilder sb=new StringBuilder();
 4             try{
 5                 BufferedReader in=new BufferedReader(new FileReader(
 6                         new File(filename).getAbsoluteFile()));
 7                     try{
 8                         String s;
 9                         while((s=in.readLine())!=null){
10                             sb.append(s);
11                             sb.append("\n");
12                             }
13                         }finally{
14                 in.close();
15                 }
16             }catch(IOException e){
17                 throw new RuntimeException(e);
18             }
19             return sb.toString();
20     }
21     public TextFile(String filename,String splitter){
22         super(Arrays.asList(read(filename).split(splitter)));
23         if(get(0).equals("")) remove(0);
24     }
25     public TextFile(String filename){
26         this(filename,"\n");
27     }
28     public void write(String filename){
29         try{
30             PrintWriter out=new PrintWriter(new File
31                     (filename).getAbsoluteFile());
32             try{
33                 for(String item : this) out.println(item);
34             }finally{
35                 out.close();
36                 }
37             }catch(IOException e){
38                 throw new RuntimeException(e);
39                 }
40
41     }
42     public static void write(String filename,String text){
43     // 其中filename指明要写入的文件名,text指明写入的字符串内容
44         try{
45             FileWriter fwriter=new FileWriter(new File
46                     (filename).getAbsoluteFile());
47             BufferedWriter out=new BufferedWriter(fwriter);
48             String []tx=text.split("\n");
49             try{
50                 for(int i=0;i<tx.length;i++)
51                 {
52                     out.write(tx[i]);
53                     out.newLine();
54                 }
55             }finally{
56                 out.flush();
57                 out.close();
58                 }
59             }catch(IOException e){
60                 throw new RuntimeException(e);
61
62             }
63
64     }
65 }
    public static void main(String[] args) {
        Set<String> words = new TreeSet<String>(
            new TextFile("StatckTest.java","\\W+"));
        System.out.print(words);
        System.out.println(words.size());

        Set<String> words2 = new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
        words2.addAll(words);
        System.out.print(words2);
        System.err.println(words2.size());

        //这里有什么不同的?

    }
时间: 2024-10-10 02:18:13

TextFile 类的创写的相关文章

类属性不能写在try{}catch(){}里面

public class cal{public static void main(String[] args){calculator ca=new calculator();byte[] first=new byte[4];byte[] second=new byte[4];System.out.println("请输入first");try{System.in.read(first);}catch(Exception e){e.toString();}String f=new Str

C++基类一定要写虚函数!!!

这是个提醒,算是吧! 如果详细原理过程,可能会有一个大篇幅.但这里不想多加赘述,只说说它的破坏力! 最近写了个图像处理框架,要做个基类来handle众多子类,写之前一直申称:要注意内存管理,写好析构函数. 谁知最后还是偏偏忘记了将基类析构函数virtual化,结果在操控基类释放内存的一段程序中,发现基类释放了,但attach到他上面的子类对象keep住没能free. 结果程序在集群上跑了几天,终于挂彩了...查了半天,终于发现base class的析构函数忘了加virtual,导致自己析构ok,

基类的析构函数写成virtual虚析构函数

虚函数作用:动态绑定,实现多态效果. 场景问题: 派生类中有资源需要回收,而在编程中采用多态,由基类的指针指向派生类,则在释放的时候,如果基类的析构函数不是virtual,则派生类的析构函数得不到释放 总结: C++中基类采用virtual虚析构函数是为了防止内存泄漏.具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放.假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数.那么在这种情

C++模板类代码只能写在头文件?

  这个问题,实际上我几年前就遇到了.最近写个模板类玩的时候,再次遇到.   当我非常仔细的将定义和实现分开,在头文件中保留了最少的依赖后,一切就绪.cpp单独编过.但是当使用的时候,就会报告所有的函数调用都没有实现.按常规.h/.cpp而言这是不可能的.但是模板类就是这么独特.简单说说他的原因,也备自己将来遗忘:   从语法角度而言,是没有强制要求说模板代码的声明和实现不可以分开.那么当分离的声明和实现写好后,单独编译.cpp是可以通过的,但是生成的.o文件却非常小,只有一个原因:确实没有任何

[转]C# 将类的内容写成JSON格式的字符串

将类的内容写入到JSON格式的字符串中 本例中建立了Person类,赋值后将类中内容写入到字符串中 运行本代码需要添加引用动态库Newtonsoft.Json 程序代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; //需要引用 Newtonsoft.Json.dll using Newtonsoft.Json

简单的String类实现及写时拷贝

#include<iostream> using namespace std; class String { public: /*String(const char* str=" ") :_str(new char[strlen(str)+1]) { strcpy(_str, str); } */ String(const char* str = " ") { if (str == NULL) { _str = new char; _str[0] = '

QT in VS 多语言实现(中英文切换,每个步骤都有截图,只有UTF8才能让Qt语言家正确读取。先qApp-&gt;removeTranslator,然后installTranslator,每个类都要写上槽函数RetranslateUI)

最近项目需要软件具有中英文双语切换功能,而QT又自带此功能,现将实现方式记录下来. 说到中英文切换,少不了要了解QT的内部编码方式.在此就不详述QT编码方式了,具体可参考 彻底弄懂Qt的编码.只需要记住QT采用utf-8编码!window操作系统采用ansi编码,简体中文操作系统的ansi代表gbk. 1. 生成.ts文件前置步骤:所有需要翻译的内容用QObject::tr()包起来.具体自行了解一下QObject::tr()的功能. 先创建一个factory类: // factory.cppf

C++ String类写时拷贝

    维基百科:     写入时复制(英语:Copy-on-write,简称COW)是一种计算机程序设计领域的优化策略.其核心思想是,如果有多个调用者(callers)同时要求相同资源(如内存或磁盘上的数据存储),他们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源的内容时,系统才会真正复制一份专用副本(private copy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变.这过程对其他的调用者都是透明的(transparently).此作法主要的优点是如果调用者没有修

使用EventLog类写Windows事件日志

在程序中经常需要将指定的信息(包括异常信息和正常处理信息)写到日志中.在C#3.0中可以使用EventLog类将各种信息直接写入Windows日志.EventLog类在System.Diagnostics命名空间中.我们可以在“管理工具” > "事件查看器“中可以查看我们写入的Windows日志,如下图所示: 下面是一个使用EventLog类向应用程序(Application)写入日志的例子,日志类型使用EventLogEntryType枚举类型指定. Code highlighting