尽管并不必要IO库的一部分,但StringTokenizer提供了与StreamTokenizer极相似的功能,所以在这里一并讲述。
StringTokenizer的作用是每次返回字串内的一个记号。这些记号是一些由制表站、空格以及新行分隔的连续字符。因此,字串“Where is my cat?”的记号分别是“Where”、“is”、“my”和“cat?”。与StreamTokenizer类似,我们可以指示StringTokenizer按照我们的愿望分割输入。但对于StringTokenizer,却需要向构建器传递另一个参数,即我们想使用的分隔字串。通常,如果想进行更复杂的操作,应使用StreamTokenizer。
可用nextToken()向StringTokenizer对象请求字串内的下一个记号。该方法要么返回一个记号,要么返回一个空字串(表示没有记号剩下)。
作为一个例子,下述程序将执行一个有限的句法分析,查询键短语序列,了解句子暗示的是快乐亦或悲伤的含义。
//: AnalyzeSentence.java
// Look for particular sequences
// within sentences.
import java.util.*;
public class AnalyzeSentence {
public static void main(String[] args) {
analyze("I am happy about this");
analyze("I am not happy about this");
analyze("I am not! I am happy");
analyze("I am sad about this");
analyze("I am not sad about this");
analyze("I am not! I am sad");
analyze("Are you happy about this?");
analyze("Are you sad about this?");
analyze("It's you! I am happy");
analyze("It's you! I am sad");
}
static StringTokenizer st;
static void analyze(String s) {
prt("\nnew sentence >> " + s);
boolean sad = false;
st = new StringTokenizer(s);
while (st.hasMoreTokens()) {
String token = next();
// Look until you find one of the
// two starting tokens:
if(!token.equals("I") &&
!token.equals("Are"))
continue; // Top of while loop
if(token.equals("I")) {
String tk2 = next();
if(!tk2.equals("am")) // Must be after I
break; // Out of while loop
else {
String tk3 = next();
if(tk3.equals("sad")) {
sad = true;
break; // Out of while loop
}
if (tk3.equals("not")) {
String tk4 = next();
if(tk4.equals("sad"))
break; // Leave sad false
if(tk4.equals("happy")) {
sad = true;
break;
}
}
}
}
if(token.equals("Are")) {
String tk2 = next();
if(!tk2.equals("you"))
break; // Must be after Are
String tk3 = next();
if(tk3.equals("sad"))
sad = true;
break; // Out of while loop
}
}
if(sad) prt("Sad detected");
}
static String next() {
if(st.hasMoreTokens()) {
String s = st.nextToken();
prt(s);
return s;
}
else
return "";
}
static void prt(String s) {
System.out.println(s);
}
} ///:~
对于准备分析的每个字串,我们进入一个while循环,并将记号从那个字串中取出。请注意第一个if语句,假如记号既不是“I”,也不是“Are”,就会执行continue(返回循环起点,再一次开始)。这意味着除非发现一个“I”或者“Are”,才会真正得到记号。大家可能想用==代替equals()方法,但那样做会出现不正常的表现,因为==比较的是句柄值,而equals()比较的是内容。
analyze()方法剩余部分的逻辑是搜索“I am sad”(我很忧伤、“I am nothappy”(我不快乐)或者“Are you sad?”(你悲伤吗?)这样的句法格式。若没有break语句,这方面的代码甚至可能更加散乱。大家应注意对一个典型的解析器来说,通常都有这些记号的一个表格,并能在读取新记号的时候用一小段代码在表格内移动。
无论如何,只应将StringTokenizer看作StreamTokenizer一种简单而且特殊的简化形式。然而,如果有一个字串需要进行记号处理,而且StringTokenizer的功能实在有限,那么应该做的全部事情就是用StringBufferInputStream将其转换到一个数据流里,再用它创建一个功能更强大的StreamTokenizer。
分享到:
相关推荐
在这个问题中,我们关注的是如何在 C# 中模拟实现 Java 的 `StringTokenizer` 类的功能。Java 的 `StringTokenizer` 类是一个用于分隔字符串的工具,它可以根据特定的分隔符将一个大的字符串拆分成多个小的字符串或...
import java.util.StringTokenizer; /** * * @author lushuaiyin * */ public class StringTokenizerTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated...
用delphi实现java的StringTokenizer类的功能。在原来曾青松版本的基础上修复bug完成的。
### StringTokenizer的用法 在Java编程语言中,`StringTokenizer`是`java.util`包中的一个实用类,用于将字符串分割成多个子字符串(通常称为令牌或token)。它支持多种分隔符,并允许用户控制是否返回分隔符作为...
StringTokenizer tool class
在Java编程语言中,`StringTokenizer`类是一个非常实用的工具,它用于将字符串分割成多个子字符串。这个工具在处理包含多个分隔符的复杂数据时尤其有用。本详细教程将深入探讨`StringTokenizer`的工作原理、用法以及...
StringTokenizer tokens = new StringTokenizer(input, " "); while (tokens.hasMoreTokens()) { String token = tokens.nextToken(); // 处理每个标记 } ``` ### 2. 输入输出处理 在Java中,`JOptionPane`类...
基于Java中的StringTokenizer类详解 Java中的StringTokenizer类是一个非常有用的工具类,用于字符串的分隔解析。它属于Java.util包。通过使用StringTokenizer类,我们可以轻松地将一个字符串分隔成多个子字符串,以...
JAVA StringBuffer类与StringTokenizer类代码解析 JAVA StringBuffer类是Java语言中的一种字符串处理类,提供了一个字符串的可变序列,类似于String类,但它对存储的字符序列可以任意修改,使用起来比String类灵活...
Write a program called StringTokenizer1.java that accepts a string, looks for commas within the string, and breaks the string up into the parts separated by the comma. For example, the string ...
StringTokenizer 马克-to-win java视频 字符串解析器
StringTokenizer 马克-to-win java视频 字符串解析器
java文档String和StringTokenizer 马克-to-win java视频 字符串解析器
本段代码 用于测试StringTokenizer用法/** * 测试StringTokenizer,继承Enumeration; * @author DELL */
本文将深入探讨几个核心类:Integer、Float、Double、Character、String、StringTokenizer、StringBuffer以及Random,解析它们的功能与应用场景,帮助开发者更好地利用这些类来解决实际问题。 ### Integer类 `...
Java中的`StringTokenizer`类是处理字符串的一种工具,它允许我们根据特定的分隔符将一个字符串分解成多个令牌或子字符串。这个类在早期的Java版本中被广泛使用,但在Java 5之后,`split()`方法的引入使得`...
Arduino-StringTokenizer-库一个非常简单的arduino库,可以使用Java(如string-tokenizer函数)来使用定界符分割字符串。 基本说明: 参数:用于标记化的字符串; 分隔符字符串职能 : (boolean)hasNext()-如果...
java.util.StringTokenizer tokenizer = new java.util.StringTokenizer(ipConfigResponse, "\n"); String lastMacAddress = null; while(tokenizer.hasMoreTokens()) { String line = tokenizer.nextToken().trim...
- 使用`StringTokenizer`解析用户输入,例如,如果用户名和留言内容由逗号分隔,可以创建一个`StringTokenizer`实例来分割字符串。 - 将解析出的字段通过`application.setAttribute()`存储到`application`对象中。...
### Java字符串分隔类——StringTokenizer的使用方法详解 在Java编程中,处理字符串是非常常见的需求之一,特别是在数据解析、格式化输出等场景下。`StringTokenizer`类作为Java标准库的一部分,为开发者提供了一种...