仓酷云

标题: 来看StreamTokenizer [打印本页]

作者: 冷月葬花魂    时间: 2015-1-18 11:35
标题: 来看StreamTokenizer
唉!都是钱闹的1.Swing和.net网页编程开发比较------从市场份额看.net网页编程开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具
只管StreamTokenizer并非从InputStream或OutputStream衍生的,但它只伴同InputStream事情,以是非常得当地包含在库的IO部分中。
StreamTokenizer类用于将任何InputStream支解为一系列“暗号”(Token)。这些暗号实践是一些断续的文本块,两头用我们选择的任何工具分开。比方,我们的暗号能够是单词,两头用空缺(空格)和标点标记分开。
上面是一个复杂的程序,用于盘算各个单词在文本文件中反复呈现的次数:
  1. //:SortedWordCount.java
  2. //Countswordsinafile,outputs
  3. //resultsinsortedform.
  4. importjava.io.*;
  5. importjava.util.*;
  6. importc08.*;//ContainsStrSortVector
  7. classCounter{
  8. privateinti=1;
  9. intread(){returni;}
  10. voidincrement(){i++;}
  11. }
  12. publicclassSortedWordCount{
  13. privateFileInputStreamfile;
  14. privateStreamTokenizerst;
  15. privateHashtablecounts=newHashtable();
  16. SortedWordCount(Stringfilename)
  17. throwsFileNotFoundException{
  18. try{
  19. file=newFileInputStream(filename);
  20. st=newStreamTokenizer(file);
  21. st.ordinaryChar(.);
  22. st.ordinaryChar(-);
  23. }catch(FileNotFoundExceptione){
  24. System.out.println(
  25. "Couldnotopen"+filename);
  26. throwe;
  27. }
  28. }
  29. voidcleanup(){
  30. try{
  31. file.close();
  32. }catch(IOExceptione){
  33. System.out.println(
  34. "file.close()unsuccessful");
  35. }
  36. }
  37. voidcountWords(){
  38. try{
  39. while(st.nextToken()!=
  40. StreamTokenizer.TT_EOF){
  41. Strings;
  42. switch(st.ttype){
  43. caseStreamTokenizer.TT_EOL:
  44. s=newString("EOL");
  45. break;
  46. caseStreamTokenizer.TT_NUMBER:
  47. s=Double.toString(st.nval);
  48. break;
  49. caseStreamTokenizer.TT_WORD:
  50. s=st.sval;//AlreadyaString
  51. break;
  52. default://singlecharacterinttype
  53. s=String.valueOf((char)st.ttype);
  54. }
  55. if(counts.containsKey(s))
  56. ((Counter)counts.get(s)).increment();
  57. else
  58. counts.put(s,newCounter());
  59. }
  60. }catch(IOExceptione){
  61. System.out.println(
  62. "st.nextToken()unsuccessful");
  63. }
  64. }
  65. Enumerationvalues(){
  66. returncounts.elements();
  67. }
  68. Enumerationkeys(){returncounts.keys();}
  69. CountergetCounter(Strings){
  70. return(Counter)counts.get(s);
  71. }
  72. EnumerationsortedKeys(){
  73. Enumeratione=counts.keys();
  74. StrSortVectorsv=newStrSortVector();
  75. while(e.hasMoreElements())
  76. sv.addElement((String)e.nextElement());
  77. //Thiscallforcesasort:
  78. returnsv.elements();
  79. }
  80. publicstaticvoidmain(String[]args){
  81. try{
  82. SortedWordCountwc=
  83. newSortedWordCount(args[0]);
  84. wc.countWords();
  85. Enumerationkeys=wc.sortedKeys();
  86. while(keys.hasMoreElements()){
  87. Stringkey=(String)keys.nextElement();
  88. System.out.println(key+":"
  89. +wc.getCounter(key).read());
  90. }
  91. wc.cleanup();
  92. }catch(Exceptione){
  93. e.printStackTrace();
  94. }
  95. }
  96. }///:~
复制代码
最好将了局按排序格局输入,但因为Java1.0和Java1.1都没有供应任何排序办法,以是必需由本人下手。这个方针可用一个StrSortVector便利地告竣(创立于第8章,属于那一章创立的软件包的一部分。记着本书一切子目次的肇端目次都必需位于类路径中,不然程序将不克不及准确地编译)。
为翻开文件,利用了一个FileInputStream。并且为了将文件转换成单词,从FileInputStream中创立了一个StreamTokenizer。在StreamTokenizer中,存在一个默许的分开符列表,我们可用一系列办法到场更多的分开符。在这里,我们用ordinaryChar()指出“该字符没有出格主要的意义”,以是剖析器不会把它看成本人创立的任何单词的一部分。比方,st.ordinaryChar(.)暗示小数点不会成为剖析出来的单词的一部分。在与Java配套供应的联机文档中,能够找到更多的相干信息。
在countWords()中,每次从数据流中掏出一个暗号,而ttype信息的感化是判别对每一个暗号接纳甚么操纵——由于暗号大概代表一个行尾、一个数字、一个字串大概一个字符。
找到一个暗号后,会查询Hashtablecounts,核实个中是不是已以“键”(Key)的情势包括了一个暗号。若谜底是一定的,对应的Counter(计数器)对象就会增值,指出已找到该单词的另外一个实例。若谜底为否,则新建一个Counter——由于Counter构建器会将它的值初始化为1,恰是我们盘算单词数目时的请求。
SortedWordCount其实不属于Hashtable(散列表)的一品种型,以是它不会承继。它实行的一种特定范例的操纵,以是只管keys()和values()办法都必需从头展现出来,但仍不暗示应利用谁人承继,由于大批Hashtable办法在这里都是不得当的。除此之外,关于另外一些办法来讲(好比getCounter()——用于取得一个特定字串的计数器;又如sortedKeys()——用于发生一个列举),它们终极都改动了SortedWordCount接口的情势。
在main()内,我们用SortedWordCount翻开和盘算文件中的单词数目——统共只用了两行代码。随后,我们为一个排好序的键(单词)列表提掏出一个列举。并用它取得每一个键和相干的Count(计数)。注重必需挪用cleanup(),不然文件不克不及一般封闭。
接纳了StreamTokenizer的第二个例子将在第17章供应。
Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Oracle收购Sun后Java前途未卜。
作者: 爱飞    时间: 2015-1-18 18:21
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 第二个灵魂    时间: 2015-1-22 20:22
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者: 小魔女    时间: 2015-1-31 11:22
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者: 飘飘悠悠    时间: 2015-2-3 07:11
是一种使用者不需花费很多时间学习的语言
作者: 简单生活    时间: 2015-2-8 19:57
是一种将安全性(Security)列为第一优先考虑的语言
作者: 分手快乐    时间: 2015-2-14 09:47
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 柔情似水    时间: 2015-2-14 14:12
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 变相怪杰    时间: 2015-3-4 05:05
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 愤怒的大鸟    时间: 2015-3-11 17:21
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: 只想知道    时间: 2015-3-18 20:04
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 海妖    时间: 2015-3-22 17:08
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
作者: 冷月葬花魂    时间: 2015-3-29 16:13
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
作者: 灵魂腐蚀    时间: 2015-3-29 23:35
Java是一种计算机编程语言,拥有跨平台、面向对java
作者: 不帅    时间: 2015-4-7 15:01
是一种将安全性(Security)列为第一优先考虑的语言
作者: 再见西城    时间: 2015-4-16 18:10
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 因胸联盟    时间: 2015-7-8 02:37
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: 山那边是海    时间: 2015-7-15 16:38
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 蒙在股里    时间: 2015-7-18 21:56
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者: 老尸    时间: 2015-7-22 01:33
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2