首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java中的流标记器:尝试实现

Java中的流标记器:尝试实现
EN

Stack Overflow用户
提问于 2013-02-01 00:09:32
回答 3查看 1.7K关注 0票数 0

我是Java的新手,正在学习它。我已经编写了一段代码来获取用户输入并将其标记化。它编译成功,但运行时生成'-3‘作为o/p。

代码语言:javascript
运行
复制
import java.io.*;


public class TokenTester{

    public static void main(String[] arguments){
    String name;
    StreamTokenizer token;
    BufferedReader reader;
    reader = new BufferedReader(new InputStreamReader(System.in));

     try{
            System.out.println("Enter a String  ");
            name = reader.readLine();
            System.out.println(name);
            token=new StreamTokenizer((new StringReader(name)));
           //token=new StreamTokenizer(name);
            // Using new StreamTokenizer(name) throws error
            //error: no suitable constructor found for StreamTokenizer(String)
             while(token.nextToken()!= token.TT_EOF)
            {
             System.out.println(token.nextToken());
                }
            }
        catch (IOException ioe){
             System.out.println("An unexpected error occured.");
        }

        }
    }

同样,当我使用新的StreamTokenizer(名称)抛出错误“错误:找不到适合StreamTokenizer(字符串)的构造函数”

当我使用while(token.nextToken()!= token.TT_EOF)时,它显示无限循环is -1 as o/p

下面的代码运行得非常好:

代码语言:javascript
运行
复制
import java.util.StringTokenizer;

 class TokenTester {

 public static void main(String[] arguments) {
 StringTokenizer st1, st2;

 String quote1 = "VIZY 3 -1/16";
 st1 = new StringTokenizer(quote1);
 System.out.println("Token 1: " + st1.nextToken());
 System.out.println("Token 2: " + st1.nextToken());
 System.out.println("Token 3: " + st1.nextToken());

 String quote2 = "NPLI@9 27/32@3/32";
 st2 = new StringTokenizer(quote2, "@");
 System.out.println("\nToken 1: " + st2.nextToken());
System.out.println("Token 2: " + st2.nextToken());
System.out.println("Token 3: " + st2.nextToken());
 }
 }

我不能在我的代码中找出这个问题。请指点一下。

代码语言:javascript
运行
复制
http://tutorials.jenkov.com/java-io/streamtokenizer.html
http://www.java-samples.com/showtutorial.php?tutorialid=397
http://docs.oracle.com/javase/7/docs/api/

感谢Gaurav

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-02-01 00:16:11

在第一个示例中使用StreamTokenizer,在第二个示例中使用- StringTokenizer。因此,在第一个示例中,为了使其可行,您应该用StringTokenizer替换StreamTokenizer。当然,您应该使用与StringTokenizer相关的适当方法。

票数 1
EN

Stack Overflow用户

发布于 2013-02-01 00:24:26

StreamTokenizer类接受一个输入流,并将其解析为“令牌”,允许一次读取一个令牌。解析过程由一个表和许多可以设置为各种状态的标志来控制。流标记器可以识别标识符、数字、带引号的字符串和各种注释样式。

而string记号赋予器类允许应用程序将字符串拆分成记号。标记化方法比StreamTokenizer类使用的方法简单得多。

第一个示例说明了StreamTokenizer,而第二个示例说明了StringTokenizer。

票数 0
EN

Stack Overflow用户

发布于 2013-02-01 00:25:19

可通过token.sval访问令牌的值

试试这个:

代码语言:javascript
运行
复制
try{
        System.out.println("Enter a String  ");
        name = reader.readLine();
        System.out.println(name);
        token=new StreamTokenizer((new StringReader(name)));
        int numberOfTokens = token.nextToken(); //<----nextToken() returns an integer 
         while(numberOfTokens!= token.TT_EOF)
        {
         System.out.println(token.sval);  //<---- take sval
         numberOfTokens = token.nextToken();
            }
        }


    catch (IOException ioe){
         System.out.println("An unexpected error occured.");
    }

==>这个infite循环的发生是因为你在一个正弦循环中增加了2倍:

第一个增量在这里: while(token.nextToken()!= token.TT_EOF)

  • second increment在这里: System.out.println(token.nextToken());

  • is here:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14630089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档