|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
唉!都是钱闹的1.Swing和.net网页编程开发比较------从市场份额看.net网页编程开发主要占据大部分的中小型和中型的的桌面开发,原因是它封装了很多工具
只管StreamTokenizer并非从InputStream或OutputStream衍生的,但它只伴同InputStream事情,以是非常得当地包含在库的IO部分中。
StreamTokenizer类用于将任何InputStream支解为一系列“暗号”(Token)。这些暗号实践是一些断续的文本块,两头用我们选择的任何工具分开。比方,我们的暗号能够是单词,两头用空缺(空格)和标点标记分开。
上面是一个复杂的程序,用于盘算各个单词在文本文件中反复呈现的次数:- //:SortedWordCount.java
- //Countswordsinafile,outputs
- //resultsinsortedform.
- importjava.io.*;
- importjava.util.*;
- importc08.*;//ContainsStrSortVector
- classCounter{
- privateinti=1;
- intread(){returni;}
- voidincrement(){i++;}
- }
- publicclassSortedWordCount{
- privateFileInputStreamfile;
- privateStreamTokenizerst;
- privateHashtablecounts=newHashtable();
- SortedWordCount(Stringfilename)
- throwsFileNotFoundException{
- try{
- file=newFileInputStream(filename);
- st=newStreamTokenizer(file);
- st.ordinaryChar(.);
- st.ordinaryChar(-);
- }catch(FileNotFoundExceptione){
- System.out.println(
- "Couldnotopen"+filename);
- throwe;
- }
- }
- voidcleanup(){
- try{
- file.close();
- }catch(IOExceptione){
- System.out.println(
- "file.close()unsuccessful");
- }
- }
- voidcountWords(){
- try{
- while(st.nextToken()!=
- StreamTokenizer.TT_EOF){
- Strings;
- switch(st.ttype){
- caseStreamTokenizer.TT_EOL:
- s=newString("EOL");
- break;
- caseStreamTokenizer.TT_NUMBER:
- s=Double.toString(st.nval);
- break;
- caseStreamTokenizer.TT_WORD:
- s=st.sval;//AlreadyaString
- break;
- default://singlecharacterinttype
- s=String.valueOf((char)st.ttype);
- }
- if(counts.containsKey(s))
- ((Counter)counts.get(s)).increment();
- else
- counts.put(s,newCounter());
- }
- }catch(IOExceptione){
- System.out.println(
- "st.nextToken()unsuccessful");
- }
- }
- Enumerationvalues(){
- returncounts.elements();
- }
- Enumerationkeys(){returncounts.keys();}
- CountergetCounter(Strings){
- return(Counter)counts.get(s);
- }
- EnumerationsortedKeys(){
- Enumeratione=counts.keys();
- StrSortVectorsv=newStrSortVector();
- while(e.hasMoreElements())
- sv.addElement((String)e.nextElement());
- //Thiscallforcesasort:
- returnsv.elements();
- }
- publicstaticvoidmain(String[]args){
- try{
- SortedWordCountwc=
- newSortedWordCount(args[0]);
- wc.countWords();
- Enumerationkeys=wc.sortedKeys();
- while(keys.hasMoreElements()){
- Stringkey=(String)keys.nextElement();
- System.out.println(key+":"
- +wc.getCounter(key).read());
- }
- wc.cleanup();
- }catch(Exceptione){
- e.printStackTrace();
- }
- }
- }///:~
复制代码
最好将了局按排序格局输入,但因为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前途未卜。 |
|