如何制作java扫描仪的副本?

时间:2013-11-15 19:45:14

标签: java clone java.util.scanner

我正在使用Scanner在java中读取文件。在阅读过程中,我想在读取文件时将特殊段落保存在数组中,因此我需要使用额外的扫描程序来完成它。我不能使用一台扫描仪,因为两台扫描仪以不同方式处理文件(具有不同的责任)。在下面的代码中,我如何制作扫描副本?

    Scanner scan = new Scanner("test.txt");
    while(scan.hasNext())
    {
          String token = scan.next();   
          if(token.compare("START")==0)
          {
              Scanner temp = scan; //How can I make a copy of scan? 
              //scan.clone() does not work
              String curVal =temp.next();
              while(curVal.compare("END") != 0)
              {
                   ...
                   curVal =temp.next() //scan should not go to the next value
              }
          }   
      }

      Example:

      1H2i345
      Thi67s
      START
      I am5678 special bla790b bla...
      END
      We are continuing.

      output:
      String special_para ="I am5678 special bla790b bla..."
      The scan should remove all the numbers (it is just an example what scan does is much more complicated)

2 个答案:

答案 0 :(得分:1)

对象具有可用于复制对象的克隆方法。 http://en.wikipedia.org/wiki/Clone_(Java_method)

你想通过复制它来完成什么?可能有更好的解决方案。

答案 1 :(得分:1)

我认为您不需要第二台扫描仪。您只需添加一个标志和一个新条件。 (除非我误解,你需要回到文件的开头。)

bool insideStartBlock = false;
Scanner scan = new Scanner("test.txt");
while(scan.hasNext())
{
    String token = scan.next();   
    if("START".equals(token))
    {
        insideStartBlock = true;
    }
    else if ("END".equals(token)
    {
        insideStartBlock = false;
    }
    else if (insideStartBlock)
    {
        ...
        <do work based on token>
        ...
    }
}