0

我只熟悉普通的 for 循环声明。谁能告诉我这些 for 循环在做什么以及它们的条件如何工作?

BufferedReader charSource = Files.newBufferedReader(this.sourcePath, Charset.forName("ISO-8859-2");

BufferedWriter charSink = Files.newBufferedWriter(this.targetPath, Charset.forName("ISO-8859-2");

                for (String line = charSource.readLine(); line != null; line = charSource.readLine()) {
                for (final String element : line.split("\\s")) {
                    if (!element.isEmpty()) {
                        this.streamSorter.write(element);
                        elementCount += 1;
                    }
                }
            }
4

5 回答 5

5

这里没有什么不正常的。

  1. 声明一个String变量line,初始化为charSource.readLine()
  2. 测试 if line != null, if false,结束循环;
  3. 运行身体;
  4. line = charSource.readLine(),转到 2。

第二个是增强的 for 循环,它可以循环遍历 的任何实例Iterable,并且会使用Iterator给定的 by Iterable

于 2013-05-20T18:39:38.847 回答
2

显然,它们都进行了迭代,主要区别在于第一个检查条件以在每次迭代后继续。在这种情况下,如果 readLine() 不返回 null。

第二个将行拆分为字符串集合并遍历每个字符串。

于 2013-05-20T18:40:07.153 回答
1

首先,外部循环(“for(String line = ...”):

For 循环基本上是 while 循环“被屏蔽”。for 声明的三个“部分”是:计数器初始化、计数器顶部规范和计数器增量。如您所见, for 确实是一段时间。

在您的示例(外部 for)中,这正是您在做什么:“计数器”初始化(“line = charSource.ReadLine()”)、“计数器”顶部规范(“line!= null”)和“计数器”增量(“line = charSource.readLine()”)。

内部循环基本上是一个 foreach 循环。foreach 循环“自动”迭代集合,逐步为您提供迭代的项目。

于 2013-05-20T18:46:02.973 回答
1

第一个遍历所有行并在最后一行(readLine() returns null)之后停止迭代,第二个遍历所有单词(foreach循环遍历split命令的结果)。

第二个循环使用第一个循环的结果。

于 2013-05-20T18:39:52.667 回答
1

这是一个 for-each 循环。它只是遍历特定集合中的每个元素。这是访问集合中所有元素的最简单方法。

http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html http://docs.oracle.com/javase/tutorial/java/nutsandbolts/for.html

于 2013-05-20T18:40:44.443 回答