我只熟悉普通的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;
}
}
}
答案 0 :(得分:5)
这里没有什么不正常。
String
变量line
,初始化为charSource.readLine()
; line != null
,如果false
,则结束循环; line = charSource.readLine()
,转到2。第二个是 enhanced for loop ,它可以循环遍历Iterable
的任何实例,并将使用Iterator
给出的Iterable
。
答案 1 :(得分:2)
第二行将行拆分为字符串集合并遍历每个字符串。
答案 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循环在一个集合上“自动”迭代,逐步为您提供迭代项。