0

有人可以告诉我这段代码中的令牌是什么吗?我最近刚刚在 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));
                }

            }               
        }   
4

2 回答 2

4

标记化是您根据字符拆分字符串的过程。您可能希望以逗号分隔。您通过标记器传递字符串,给出','作为分隔符。然后,当您从分词器中读取每个项目时,它们会根据分隔符进行拆分。我见过的一种常见方法是阅读直播。分词器在换行符上拆分流,然后使用另一个分词器在逗号或制表符上拆分每一行。

文本的处理通常包括解析格式化的输入字符串。解析 是将文本划分为一组离散的部分或标记, 它们以一定的顺序可以传达语义含义。StringTokenizer 类提供了这个解析过程的第一步,通常称为词法分析器 (词法分析器)或扫描器StringTokenizer 实现了Enumeration 接口。因此,给定一个输入字符串,您可以使用StringTokenizer枚举其中包含的各个标记。

要使用StringTokenizer,您需要指定一个输入字符串和一个包含分隔符的字符串。 分隔符是分隔标记的字符。分隔符字符串中的每个字符都被视为有效分隔符,例如,“,;:” 将分隔符设置为逗号、分号和冒号。默认的分隔符集由空白字符组成:空格、制表符、换行符和回车符。

StringTokenizer 构造函数如下所示:

StringTokenizer(String str) 
StringTokenizer(String str, String delimiters) 
StringTokenizer(String str, String delimiters, boolean delimAsToken)

在所有版本中,str 都是将被标记的字符串。在第一个版本中,使用了默认分隔符。在第二个和第三个版本中,delimiters 是一个指定分隔符的字符串。在第三个版本中,如果delimAsToken true,则在解析字符串时分隔符也会作为标记返回。否则,不返回分隔符。 

前两种形式不将分隔符作为标记返回。一旦你创建了一个StringTokenizer 对象,nextToken( )方法就用于提取连续的标记。hasMoreTokens ( )方法在有更多令牌被提取时返回真 。由于StringTokenizer 实现了Enumeration,因此也实现了 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.

于 2012-12-14T22:06:20.873 回答
0

似乎输入文件包含特定结构的数据并且:是分隔符,因此它逐个标记读取数据并将值分配给变量,并进一步附加到某个result字符串

于 2012-12-14T22:06:47.443 回答