我因为对Java这种语言比较感兴趣,所以决定自学JAVA,不过在初期就遇到了两个问题:第一个是代码点和代码单元的问题。UTF-16编码算法的介绍看得我是晕晕乎乎的,只知道基本的多语言级别是用一个代码单元表示,辅助字符是用一对代码单元表示……举一段具体的代码当例子吧~
String greeting ="Hello";  
int index = greeting.offsetByCodecPoints(0,1);  
char cp = greeting.charAt(index);//char cp = e, and int cp = 101①String类的offsetByCodePoints方法是做什么用的?API文档中的解释我看不太明白,谁可以帮我具体解释一下吗?
②cp变量,声明char类型就是一个字母【e】 但是声明int类型就是101…… ASCII码?代码点还有代码单元不都是UTF-16的么?第二个问题就是“文件的输入与输出”。首先我不明白为什么要读取文件以及读取文件的作用是什么,其次我也不清楚如何自己确定输出文件中的内容。自己写的下面的这段代码只能够输出一个0KB的指定文件名文件……import java.io.*;
import java.util.*;
public class FileOpt
{
   public static void main(String[] args) throws FileNotFoundException
   {
      PrintWriter out = new PrintWriter("test.txt");
      String ChineseDate = String.format("%1$s%5$tY%2$s%5$tm%3$s%5$td%4$s %5$tA","今天是","年","月","日", new Date());
      String ChineseTime = String.format("%1$s%2$tT","现在时刻 北京时间", new Date());
      out.println(ChineseDate);
      out.println(ChineseTime);
      out.println("abc");
   }
}
上面这段代码(不要说我闲大了没事用一大串printf来试验,只是因为我之前写了几个printf的,而且都已成功编译运行 - -)会输出一个空白的test.txt,我想问的是,PrintWriter这个命令到底是干什么用的?最下面那几行out...那些用得对吗?我几乎没有编程经验,在编程这方面是一个十足的菜鸟,还请各位大虾耐心解答赐教哈~^_^

解决方案 »

  1.   

    雖然core java 翻譯得不是很好,但是你仔細看看也是應該可以看明白的
    常用的字(不是char)是落在一個范圍內的,不常用的就是由這個范圍以外的兩個unicode組成,也就是兩個char,看明白了這個再去翻書。printwriter嘛,你問的問題也蠻奇怪的,讀取文件名,當然是要確定存儲介質的位置了,不然你到底是要存入內存還是文件還是管道還是哪?省下的我就真不知道咋回答你了。okb文件在哪里?最后嘛,要檢驗你的內容是否正確,你單獨打印一下不就知道了。
    如果是個空白的,又沒報錯,你是不是應該考慮把字符流給關閉下下呢?或者刷新刷新?
    小同志,api要適當的計,如果沒記住,那就是理解得不夠了。。
      

  2.   

    out.flush();//涮新
    out.close();//关闭
      

  3.   

    PrintWriter is a class.
      

  4.   

    好好看看Java的API文档,你要的答案都在里面
    Java是纯面向对象的,new一个对象以后,会有一堆方法让你调用,这个都是API封装好的
    当然,你可以自己设计自己的class和方法,不过都是从Object类继承而来
      

  5.   

    就是因为看不懂API文档才来问的。。
      

  6.   

    你怎么知道我在看Core Java。。 - -
    书上有char类型的介绍,感觉那里面说的有点模糊,反正晕晕的okb文件是什么意思?那些内容都是之前打印过的~~确实只是输出了一个空白的文件也没出现错误。。
      

  7.   

    代码点和代码单元都是Unicode中的字符,代码单元是有编码格式的(顶多在汉字上有差异,其他地方没看出来)
      

  8.   

    1.offsetByCodePoints
    public int offsetByCodePoints(int index,
                                  int codePointOffset)返回此 String 中从给定的 index 处偏移 codePointOffset 个代码点的索引。注意上面的代码点,可以理解为一个完整的Unicode.
    java中的String是utf-16实现的.utf-16只是Unicode实现中的一种
    而在java中,int是32,char是16,可以理解为offsetByCodePoints(起始,偏移)是把
    固定的的字符由16转向32
    可以参考Unicode4或更高版本.
      

  9.   

    2.一个完整的Unicode字符叫代码点(CodePoint),而一个Java char 叫代码单元code unit.注意我上面说的Unicode和utf-16的区别就知道了.
      

  10.   

    3.PrintWriter继承writer,writer实现里面有writeBuffer,就是就说
    满足下面3中情况,你的txt里能有文字
    1).Buffer满了,就输出
    2).启用自动提交(找不好的词了)..
    3).flush
      

  11.   


    import java.io.*;
    import java.util.*;
    public class FileOpt
    {
    public static void main(String[] args) throws FileNotFoundException
    {
    PrintWriter out = new PrintWriter("test.txt");
    String ChineseDate = String.format("%1$s%5$tY%2$s%5$tm%3$s%5$td%4$s %5$tA","今天是","年","月","日", new Date());
    String ChineseTime = String.format("%1$s%2$tT","现在时刻 北京时间", new Date());
    out.println(ChineseDate);
    out.println(ChineseTime);
    out.println("abc");
    out.flush();
    }
    }我在后面加了一个out.flush(); 输出地就不是空白的啦~谢谢各位^_^再问一下,为什么int cp = greeting.charAt(index);,打印出来的cp值是101?
      

  12.   

    再问一下,为什么int cp = greeting.charAt(index);,打印出来的cp值是101?
    cp取出来是'e',ascii码值表示是101
      

  13.   

    为什么int cp = greeting.charAt(index);,打印出来的cp值是101?被转成了AscII码
      

  14.   

    http://blog.csdn.net/silentbalanceyh/archive/2009/09/24/4587371.aspx,我BLOG上针对这些都有说明,你可以仔细看看
      

  15.   

    问题基本解决,谢谢各位API中英文文档我都已经有了,呵呵~只是某些地方看不大懂,不过自己好好看看也有点明白了~^_^