当前位置: 首页 > 知识库问答 >
问题:

重置Java while循环

燕航
2023-03-14

我目前有两个循环,一个获取时间戳,另一个while循环根据时间戳查找映射信息并以某种方式输出。

我的问题是我目前正在循环浏览一个文本,并希望它在第二个循环的isdo="N"时再次从头开始读取文件,但是,情况似乎并非如此。

迄今为止的代码:

public static void organiseFile() throws FileNotFoundException {
    String            directory = "C:\\Users\\xxx\\Desktop\\Files\\ex1";
    Scanner           fileIn    = new Scanner(new File(directory + "_temp.txt"));
    Scanner           readIn    = new Scanner(new File(directory + ".txt"));
    PrintWriter       out       = new PrintWriter(directory + "_ordered.txt");
    ArrayList<String> lines     = new ArrayList<String>();

    String readTimeStamp     = "";
    String timeStampMapping  = "";
    String outputFirst       = "";
    String outputSecond      = "";
    String outputThird       = "";
    String previousTimeStamp = "";
    String doneList          = "";
    String isdone            = "";

    int counter = 1;

    // Loop to get time stamps
    while(fileIn.hasNextLine()) {
        readTimeStamp = fileIn.nextLine();

        if(readTimeStamp != null && readTimeStamp.trim().length() > 0) {
            readTimeStamp = readTimeStamp.substring(12, 25);
            System.out.println(readTimeStamp);

            // Previous time stamp found, no need to loop through it again
            if(doneList.contains(readTimeStamp))
                isdone = "Y";

            // Counter in place to stop outputting the first record, otherwise output file and clear variables down
            else if(!previousTimeStamp.equals(readTimeStamp) && counter > 1) {
                out.println(outputFirst + outputSecond + outputThird);  
                System.out.println("Outputting....");
                outputFirst  = "";
                outputSecond = "";
                outputThird  = "";
                counter      = 1;
            }

            // New time stamp found, start finding values in second loop
            else
                isdone = "N";

            // Secondary loop to find match of record
            while(readIn.hasNextLine() && isdone.equals("N")) {
                System.out.println("Mapping...");
                timeStampMapping = readIn.nextLine();
                System.out.println(timeStampMapping);

                // When a record has been found with matching time stamps, start ordering
                if(timeStampMapping.contains(readTimeStamp)) {
                    previousTimeStamp = readTimeStamp;
                    System.out.println(previousTimeStamp);

                    if(timeStampMapping.contains("[EVENT=agentStateEvent]")) {
                        outputFirst += timeStampMapping + "\r\n";
                    } else if(timeStampMapping.contains("[EVENT=TerminalConnectionCreated]")) {
                        outputSecond += timeStampMapping + "\r\n";
                    } else {
                        outputThird += timeStampMapping + "\r\n";
                        doneList    += readTimeStamp + ",";
                    }

                    counter++;
                }
            }
        }
    }

    System.out.println("Outputting final record");
    out.println(outputFirst + outputSecond + outputThird);
    System.out.println("Complete!");
    out.close();
}

共有1个答案

盛柏
2023-03-14

您可以使用Scanner.reset()将其重置为文件的开头。例如,在您的第二个while之后-循环包括:

if (isdone.equals("Y")) {
    fileIn.reset();
}

顺便问一下:你为什么用字符串来代替布尔值??

 类似资料:
  • 我有一个家庭作业。。。代码如下。。。有几个问题要问。。。提前谢谢。Java初学者。。。如果这看起来很笨拙,请不要笑 有没有办法对我问的每个问题使用我的IF语句,而不必为每个问题更改字符串名称? 有没有办法创建一个方法(?)对于那些如果语句,所以我不必为我问的每一个问题写出来? 如果用户在10秒内没有输入答案,我想有一个定时器提示他们回答,我该怎么做?

  • 我是java的新手,我正在编写这个简短的程序,您可以在其中猜测1到10之间的数字。正确的数字存储为整数。如果您猜测较低的数字,它应该说“正确的数字较高”,如果您猜测较高,它应该说“正确的数字较低”。这是我所拥有的: 所以很明显这是行不通的,因为如果你输入一个更小的数字,它会跳到下一个数字,即使这个数字更大,它也是正确的。那么,我如何解决这个问题,让它检查两个语句呢?抱歉解释得不好。谢了。

  • 专家。Javascript没有产生期望的延迟效果<从其他问题开始,我知道,问题在于settimeout和我使用它的方式。但我仍然无法理解Settimeout是如何工作的。所以我把代码放在这里。出于知识目的,只需要使用Javascript 事实上,我正试图用javascript来澄清我关于这个闭包的概念。它们是Javascript中扭曲的东西吗?

  • 问题内容: 我正在使用Java Swing编写游戏。我想在每次循环执行时绘制一下,并在之间稍加延迟以在屏幕上创建级联效果。我相信系统中的效率例程会将调用折叠为一个调用。无论如何,所有更改都在总延迟后立即发生。是否有某种方法可以强制系统立即重新绘制,然后在循环的每次迭代中延迟? 我的代码: 问题答案: 您可以用来强制立即重绘。 编辑:再次阅读您的问题后,对我来说,您可能正在事件分发线程上执行逻辑。这

  • 本文向大家介绍WordPress中重置文章循环的rewind_posts()函数讲解,包括了WordPress中重置文章循环的rewind_posts()函数讲解的使用技巧和注意事项,需要的朋友参考一下 有些时候,在索引页中(首页、分类文章、标签文章、作者文章索引……)提前进入 WordPress 文章循环中( Loop ),以获得一些我们想要获得的信息,但 WP 中,单一页面一般只会一次性跳入循

  • 以上将给出以下随机输出: 任务很简单:确保每个promise只在另一个promise之后运行()。 由于某种原因,我找不到一个方法来做这件事。 我尝试了生成器函数(),尝试了返回promise的简单函数,但最终都归结为同一个问题:循环是同步的。 对于async,我只需使用。 你怎么解决?