如何扫描字符串行,然后在该行内扫描而不创建嵌套循环? Java的

时间:2015-06-03 02:24:27

标签: java string

我想编写一个扫描文件每一行的代码,然后它接受每一行并扫描它上面的每个下一个标记(通过指定的分隔符),然后将标记与输入进行比较,如果没有匹配的话移动到下一行..等等。但是,我无法想到任何其他不涉及嵌套循环的方法!还有其他方法或更好的方法吗?

try {
    Scanner scan = new Scanner(CLOCK_TIME);

    while (scan.hasNext()) {
        //scan next line
        //scan all specified tokens from each line
        //if no match repeat, otherwise break
    }
}

3 个答案:

答案 0 :(得分:0)

使用内循环,这是该工具的用途(对于我的生活,我不知道为什么你担心使用它)。只需确保在内部循环结束后关闭内部扫描仪时关闭内部扫描程序,并且外部扫描程序也是如此。

Scanner fileScanner = new Scanner(someFile);
while (fileScanner.hasNextLine()) {
   String line = fileScanner.nextLine();
   Scanner innerScanner = new Scanner(line);
   while (innerScanner.hasNext()) {
      // do whatever
   }
   innerScanner.close();
}
fileScanner.close();

答案 1 :(得分:0)

您可以使用split函数拆分该行,但是您仍然必须使用循环来迭代生成的数组。

为了便于查看,您可以将line传递给具有内部嵌套循环的函数。

Scanner fileScanner = new Scanner(someFile);
while (fileScanner.hasNextLine()) {
 String line = fileScanner.nextLine();
 scanLine(line) // call the inner loop function
}
fileScanner.close();

...

private void scanLine(String line) {
  Scanner innerScanner = new Scanner(line);
  while (innerScanner.hasNext()) {
    // inner nested loop code inside separate function
  }
  innerScanner.close();
}

听起来你想要做什么,没有内循环就没办法处理这条线。

答案 2 :(得分:0)

除非我误解了您的问题,否则您想知道用户输入是否在一行中,如果不是,则跳过它。为什么不使用String.contains()来确定用户输入是否在行中?

try {
    Scanner scan = new Scanner(CLOCK_TIME);

    while (scan.hasNext()) {
        String line = scan.nextLine();
        if (line.contains(userInput) {
            // Do something
        }
    }
}