在这个例子中使用的是什么令牌?

时间:2012-12-14 22:02:06

标签: java

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

            }               
        }   

2 个答案:

答案 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>