首页 > 编程语言 >《Java编程思想第四版》学习笔记28--关于StreamTokenizer

《Java编程思想第四版》学习笔记28--关于StreamTokenizer

时间:2023-09-17 18:32:57浏览次数:29  
标签:StreamTokenizer Java String -- st file new counts

//: SortedWordCount.java
// Counts words in a file, outputs
// results in sorted form.
import java.io.*;
import java.util.*;
import c08.*; // Contains StrSortVector
class Counter {
private int i = 1;
int read() { return i; }
void increment() { i++; }
}
public class SortedWordCount {
private FileInputStream file;
private StreamTokenizer st;
private Hashtable counts = new Hashtable();
SortedWordCount(String filename)
throws FileNotFoundException {
try {
file = new FileInputStream(filename);
st = new StreamTokenizer(file);
st.ordinaryChar('.');
st.ordinaryChar('-');
} catch(FileNotFoundException e) {
System.out.println(
"Could not open " + filename);
throw e;
}
}
void cleanup() {
try {
file.close();
} catch(IOException e) {
System.out.println(
"file.close() unsuccessful");
}
}
void countWords() {
try {
while(st.nextToken() !=
StreamTokenizer.TT_EOF) {
String s;
switch(st.ttype) {
case StreamTokenizer.TT_EOL:
s = new String("EOL");
break;
case StreamTokenizer.TT_NUMBER:
s = Double.toString(st.nval);
break;
case StreamTokenizer.TT_WORD:
s = st.sval; // Already a String
break;
default: // single character in ttype
s = String.valueOf((char)st.ttype);
}
if(counts.containsKey(s))
((Counter)counts.get(s)).increment();
else
counts.put(s, new Counter());
}
} catch(IOException e) {
System.out.println(
"st.nextToken() unsuccessful");
}
}
Enumeration values() {
return counts.elements();
}
Enumeration keys() { return counts.keys(); }
Counter getCounter(String s) {
return (Counter)counts.get(s);
}
Enumeration sortedKeys() {
Enumeration e = counts.keys();
StrSortVector sv = new StrSortVector();
while(e.hasMoreElements())
sv.addElement((String)e.nextElement());
// This call forces a sort:
return sv.elements();
}
public static void main(String[] args) {
try {
SortedWordCount wc =
new SortedWordCount(args[0]);
wc.countWords();
Enumeration keys = wc.sortedKeys();
while(keys.hasMoreElements()) {
String key = (String)keys.nextElement();
System.out.println(key + ": "
+ wc.getCounter(key).read());
}
wc.cleanup();
} catch(Exception e) {
e.printStackTrace();
}
}
} ///:~

                                                                                                                                                           P.302

该例程中default: // single character in ttype

s = String.valueOf((char)st.ttype);语句中的st.ttype应该指的是st.ordinaryChar()中指定的字符。

标签:StreamTokenizer,Java,String,--,st,file,new,counts
From: https://blog.51cto.com/u_16183536/7503418

相关文章

  • 从 MongoDb 集合中选择文档返回响应时出现不可序列化错误
    当从MongoDB集合中选择文档返回响应时出现不可序列化错误,可能是因为以下原因:数据类型不可序列化:检查文档中的数据类型是否可被序列化。某些数据类型,如日期对象或二进制数据,可能无法直接序列化为常见的数据格式(如JSON)。在这种情况下,您可能需要先对这些数据进行处理,将其转换为可序列......
  • 如何在第一个查询没有结果时执行第二个查询 - MYSQL
    在MySQL中,您可以使用IFNULL()函数和UNION操作符来实现在第一个查询没有结果时执行第二个查询。下面是一个示例:SELECTcolumn1,column2FROMtable1WHEREconditionUNIONSELECTcolumn1,column2FROMtable2WHEREconditionANDNOTEXISTS(SELECTcolumn1,column2......
  • 动态内存分配(malloc,free)1
    使用动态内存开辟函数,可以创捷长度可变的数组大小,这样可以减少空间的浪费。在创建可变长度的数组时,其实在C99标准下,是可以直接创建的,例如linux下gcc编译器可以通过编译命令gcctest.c-std=c99,来实现。在vs下是不支持的,所以需要通过内存开辟函数来进行创建。在开辟空间的时候,有可能......
  • 清理文本中的 图片标签乱码
    清理之前:清理之后:代码实现:<pclass="content"v-html="changeUrl(item.content)"></p>changeUrl(data){vara=data;//用正则获取img标签varb=/<img[^>]*src=['"]([^'"]+)[^>]*>/g;......
  • vue3中验证手机号的正则表达式
    在Vue3中,你可以使用正则表达式来验证手机号。以下是一个基本的手机号验证正则表达式示例,可以用于检查中国大陆地区的手机号码:constphoneNumberRegex=/^1[3456789]\d{9}$/;//示例用法constphoneNumber="13812345678";if(phoneNumberRegex.test(phoneNumber)){cons......
  • Cucumber自动化相关
    1)githubaddresshttps://github.com/shaikuba/bdd-cucumber-examples 2)Codesexample: 3)CucumberExpression: ......
  • UML事物
         ......
  • jdk8之Optional类判空处理
    目录1Optional1.1简介1.2主要方法讲解1.2.1Optional对象创建1.2.2Optional.get()1.2.3Optional.isPresent()1.2.4Optional.ifPresent()1.2.5Optional.filter()1.2.6Optional.flatMap()1.2.7Optional.orElse()1.2.8Optional.orElseGet()1.2.9Optional.orElseThrow()1.3......
  • java中使用JNA调用C/C++动态链接库中的函数
    目录C++部分创建动态库项目JAVA部分pom依赖工程结构测试类jna提供C与JAVA数据类型映射参考C++部分创建动态库项目注意:动态库中的头文件,必须要将需要导出的函数包裹在extern"C"{}中,否者在使用侧java工程中,就无法加载并使用JAVA部分pom依赖<dependencies><dependenc......
  • 信息安全系统设计与实现学习笔记2
    学习笔记2知识点总结文件操作文件操作涵盖了对文件的添加、删除、修改、打开、关闭等基本操作。二进制文件和文本文件的转换二进制转文本文件需要构建二进制转十六进制函数,按照每八位一组,每四位一单元进行转换。反过来,文本文件转二进制文件需要构建十六进制转二进制函......