这些“for”循环有什么作用?

时间:2013-05-20 18:37:17

标签: java for-loop foreach

我只熟悉普通的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;
                    }
                }
            }

5 个答案:

答案 0 :(得分:5)

这里没有什么不正常。

  1. 声明String变量line,初始化为charSource.readLine();
  2. 测试line != null,如果false,则结束循环;
  3. run body;
  4. line = charSource.readLine(),转到2。
  5. 第二个是 enhanced for loop ,它可以循环遍历Iterable的任何实例,并将使用Iterator给出的Iterable

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分: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

答案 4 :(得分:1)

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

For循环基本上是while循环“蒙面”。 for声明的三个“部分”是:计数器初始化,计数器顶部规范和计数器增量。正如你所看到的,for for真的有一段时间了。

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

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