A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

public class Exercise3 {
        // 3.将day19-笔记.txt中的所有字符按照码表值排序不去重复, 存入另一个文件中(也就是aaaabbbbbbccccc.....的方式)
        public static void main(String[] args) throws IOException {
                Reader in = new BufferedReader(new FileReader("day19-笔记.txt"));
                Set<Character> set = new TreeSet<Character>(new MyComparator());
                int b;
                while((b = in.read()) != -1)
                        set.add((char)b);
                in.close();
               
                Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("treesetday19")));
                //for(Character ch : set)
                for(char ch : set)
                out.write(ch);
                out.close();
        }

}

class MyComparator implements Comparator<Character> {
        public int compare(Character a, Character b) {
                return a - b != 0 ? a - b : 1;
        }
}

"day19-笔记.txt"   和   "treesetday19"     都是文档文件
也乱码了   对照原文件  也没看出问题  不知哪里出错了   拜求明白人指导

1 个回复

倒序浏览
本帖最后由 赵玮_Tom 于 2012-5-14 09:23 编辑

你的程序有三处不妥:已经标注,尤其第一条!(流关联的文件已经修改,但不会影响程序效果。)
import java.io.*;
import java.util.*;
public class Exercise3
{
// 3.将day19-笔记.txt中的所有字符按照码表值排序不去重复, 存入另一个文件中(也就是aaaabbbbbbccccc.....的方式)
public static void main(String[] args) throws IOException
{
  Reader in = new BufferedReader(new FileReader("Exercise3.java"));
  Set<Character> set = new TreeSet<Character>(new MyComparator());
  int b;
  while((b = in.read()) != -1)
  {
   if((b>=65 && b<=90)||(b>=97 && b<=122))//1.如果只取英文字符的话,要进行条件判断。
    set.add((char)b);
  }
  in.close();//2.在此关闭输入流并没有错误,但一般会在整个读写过程完毕后关闭输入流和输出流。
  
  Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("123")));//3. 文件最好有扩展名。当然如果没有的话,
//强制使用记事本打开文件也是可以的(程序的严谨性,你懂得)
  for(char ch : set)
   out.write(ch);
     
  out.close();
}
}
class MyComparator implements Comparator<Character>
{
public int compare(Character a, Character b)
{
   return a - b != 0 ? a - b : 1;
}
}

加入判断条件后,我进行了一下测试,是可以到达预期效果的。如果不进行条件判断,那么你也会将中文读入集合内,而一个中文字符是有2个字节组成的(默认GBK编码表),一个英文字符由一个字节组成。这样会把中文的两个字节拆开,故形成乱码。

点评

楼上的哥我膜拜你 但是能不能 留几个问题给我们回答 赚点技术分好入学,没有技术分好纠结  发表于 2012-5-14 12:07
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马