【发布时间】:2017-02-21 06:28:04
【问题描述】:
对于这个程序,我需要实现一个令牌迭代器,它从字符串中扫描并存储一个有效的令牌。这似乎是一个简单的过程,但我的代码只返回字符串中的第一个有效标记。我需要调用 hasNext();在 next() 方法中的不同位置?
这是我的代码:
public class TokenIter implements Iterator<String>{
//input line to be tokenized
private String line;
// the next Token, null if no next Token
private String nextToken;
//Edit
private Scanner scan;
public TokenIter(String line){
this.line = line;
}
@Override
public boolean hasNext() {
//Edit
scan = new Scanner(line);
if(scan.hasNext()){
nextToken = scan.next();
return true;
}
scan.next();
nextToken = null;
return false;
}
@Override
public String next() {
if(!hasNext()){
throw new NoSuchElementException();
}
else{
if(nextToken.equals("true")){
return nextToken;
}
if(nextToken.equals("false")){
return nextToken;
}
if(nextToken.equals("or")){
return nextToken;
}
if(nextToken.equals("and")){
return nextToken;
}
if(nextToken.equals("not")){
return nextToken;
}
if(nextToken.equals("(")){
return nextToken;
}
if(nextToken.equals(")")){
return nextToken;
}
}
return "";
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
public static void main(String[] args){
String line;
args = Debug.init(args);
if(args.length>0)
line = args[0];
else
line = " not (true or error false) @# $% ";
System.out.println("line: [" + line + "]");
TokenIter tokIt = new TokenIter(line);
while(tokIt.hasNext()){
System.out.println("next token: [" + tokIt.next() + "]");
}
}
这是我正在运行的程序的输出:
line: [ not (true or error false) @# $% ]
next token: [not]
next token: [not]
next token: [not]
next token: [not]
next token: [not]
next token: [not]
这是我想要的输出:
line: [ not (true or error false) @# $% ]
next token: [not]
next token: [(]
next token: [true]
next token: [or]
next token: [false]
next token: [)]
【问题讨论】: