有人可以告诉我这段代码中的令牌是什么吗?我刚刚在Java中发现了令牌并尝试了解它们的使用原因。我认为令牌被用作断点,但这里几乎看起来像是用来限制
private String printResult()
{
StringBuilder result = new StringBuilder();
String swimType=null;
String length=null;
String width=null;
String depth=null;
String volume=null;
String radius=null;
String pnlName = null;
try {
File resultFile = new File("Report.txt");
Scanner resultScanner = new Scanner(resultFile);
while(resultScanner.hasNext())
{
StringTokenizer strToken = new StringTokenizer(resultScanner.nextLine(), ":");
if(strToken.hasMoreTokens())
{
pnlName = strToken.nextToken();
swimType = strToken.nextToken();
if("Box".equalsIgnoreCase(swimType))
{
length = strToken.nextToken();
width = strToken.nextToken();
depth = strToken.nextToken();
volume = strToken.nextToken();
result.append(createResultStr(swimType, length, width, depth, volume));
}
else
{
radius = strToken.nextToken();
depth = strToken.nextToken();
volume = strToken.nextToken();
result.append(createResultStr(swimType, radius, depth, volume));
}
}
}
答案 0 :(得分:4)
标记是基于字符分割字符串的过程。您可能希望拆分逗号。您将字符串传递给tokenizer,并将','作为分隔符。然后,当您从标记生成器中读取每个项目时,它们将根据分隔符进行拆分。我见过的常见方法是阅读直播。标记生成器在换行符上拆分流,然后使用另一个标记生成器在逗号或制表符上拆分每一行。
文本的处理通常包括解析格式化的文本 输入字符串。 解析 是将文本划分为一组离散部分或标记, 哪一个 序列可以传达语义。 StringTokenizer 类提供第一个 在这个解析过程中,通常称为词法分析器 (词法分析器)或扫描仪。 的StringTokenizer 实现枚举 的接口。因此, 给定一个输入字符串,您可以使用 StringTokenizer 枚举其中包含的各个标记。
使用 StringTokenizer , 指定输入字符串和包含分隔符的字符串。 分隔符是 分隔标记的字符。分隔符字符串中的每个字符都被视为有效的分隔符 - 例如,“,;:” 将分隔符设置为a 逗号,分号和冒号。默认的分隔符集包括 空白字符:空格,制表符,换行符和回车符。
StringTokenizer 显示构造函数 这里:
StringTokenizer(String str)
StringTokenizer(String str, String delimiters)
StringTokenizer(String str, String delimiters, boolean delimAsToken)
在所有版本中, str 是将要的字符串 被标记化。在第一个版本中,使用默认分隔符。在第二和第三版中,分隔符 是一个字符串 指定分隔符。在第三个版本中,如果 delimAsToken 是, 然后,在解析字符串时,分隔符也会作为标记返回。否则, 分隔符不归还。
前两个表单不会将分隔符作为标记返回。一旦创建了 StringTokenizer 对象, nextToken( )方法用于提取连续的令牌。 hasMoreTokens( )方法返回 true 虽然有更多的令牌需要提取。从 StringTokenizer开始 实现枚举, 该 hasMoreElements()和 nextElement()方法 也实现了,它们的行为与 hasMoreTokens相同( )和 nextToken( ),分别。
以下是创建 StringTokenizer的示例 解析 “key = value”对。连续的“key = value”对分隔开 用分号。
// Demonstrate StringTokenizer.
import java.util.StringTokenizer;
class STDemo {
static String in = "title=Java-Samples;" +
"author=Emiley J;" +
"publisher=java-samples.com;" +
"copyright=2007;";
public static void main(String args[]) {
StringTokenizer st = new StringTokenizer(in, "=;");
while (st.hasMoreTokens()) {
String key = st.nextToken();
String val = st.nextToken();
System.out.println(key + "\t" + val);
}
}
}
此程序的输出如下所示:
title Java-samples
author Emiley J
publisher java-samples.com
copyright 2007
注意
如果delimiter为null,则此构造函数不会引发异常。但是,尝试在生成的StringTokenizer上调用其他方法可能会导致NullPointerException
。
答案 1 :(得分:0)
似乎输入文件包含某些结构中的数据,而:
是分隔符,因此它通过标记读取数据标记并将值分配给变量,并进一步附加到某些result
字符串< / p>