如何“偷看”Java扫描程序上的下一个元素?

2022-09-02 23:22:56

也就是说,如何在不删除迭代器的情况下获取迭代器的下一个元素?因为我可能想要或可能不想根据其内容删除它。我有一个文件扫描程序,我使用Scanster next()方法迭代XML标签。

提前致谢。


答案 1

这是另一个基于包装器的解决方案,但这个解决方案只有一个内部扫描仪。我把另一个留给展示一个解决方案,这是一个不同的,可能是更好的解决方案。同样,此解决方案不会实现所有内容(并且未经测试),但您只需要实现打算使用的那些部分。

在此版本中,您将保留对实际内容的引用。next()

import java.util.Scanner;

public class PeekableScanner
{
    private Scanner scan;
    private String next;

    public PeekableScanner( String source )
    {
        scan = new Scanner( source );
        next = (scan.hasNext() ? scan.next() : null);
    }

    public boolean hasNext()
    {
        return (next != null);
    }

    public String next()
    {
        String current = next;
        next = (scan.hasNext() ? scan.next() : null);
        return current;
    }

    public String peek()
    {
        return next;
    }
}

答案 2

我不认为有类似窥视的方法,但你可以使用hasNext(String)来检查下一个令牌是否是你正在寻找的。