我是Java新手并且正在学习它。我编写了一个代码来获取用户输入并对其进行标记。它成功编译但在运行时产生' -3'如o / p。
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(String)"
的合适构造函数当我使用while(token.nextToken()!= token.TT_EOF) 它显示无限循环为-1为o / p
下面的代码非常正常:
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());
}
}
我无法在代码中找出问题所在。 请指导。
我已提到:
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/
由于 拉夫
答案 0 :(得分:1)
在第一个示例中,您使用StreamTokenizer,在第二个示例中使用StringTokenizer。因此,在第一个示例中,为了使其可行,您应该使用StringTokenizer替换StreamTokenizer。当然,您应该使用与StringTokenizer相关的适当方法。
答案 1 :(得分:0)
StreamTokenizer类接受输入流并将其解析为“令牌”,允许一次读取一个令牌。解析过程由一个表和许多可以设置为各种状态的标志控制。流标记器可以识别标识符,数字,带引号的字符串和各种注释样式。
虽然,字符串tokenizer类允许应用程序将字符串分解为标记。标记化方法比StreamTokenizer类使用的方法简单得多。
第一个例子说明了StreamTokenizer,而第二个例子说明了StringTokenizer。
答案 2 :(得分:0)
可以通过token.sval
访问令牌的值试试这个:
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.");
}
当我使用while(token.nextToken()!= token.TT_EOF)时,它显示无限 循环为-1为o / p
==&GT;这个infite循环发生的原因是你在一个sinle循环中递增2x:
第一个增量就在这里:while(令牌。 nextToken()!= token.TT_EOF)
第二个增量在这里:System.out.println(token。 nextToken());