java - 如何在读取文件时打破 Scala 中的循环?

标签 java list scala loops

我需要在 scala 中读取一些大文本文件。并将该文件中的一行附加到 StringBuilder。但是如果该文件中的行包含一些字符串,我需要打破循环。而且我不想将该字符串附加到 StringBuilder。例如在 java 中,循环 A 将在结果字符串中包含 "pengkor"。循环 B 不包括该字符串,但在循环中有 break 语句,这在 scala 中不可用。在循环 C 中,我使用了 for 语句,但其行为与 Scala 中的 for 循环非常不同。我主要关心的是不要在 StringBuilder 中包含 "pengkor" String 并且不要将文件的所有内容加载到 Scala 列表(为了在 Scala 中进行列表理解或其他一些列表操作),因为文件大小。

public class TestDoWhile {

    public static void main(String[] args) {
        String s[] = {"makin", "manyun", "mama", "mabuk", "pengkor", "subtitle"};
        String m = "";
        StringBuilder builder = new StringBuilder();
        // loop A
        int a = 0;
        while (!m.equals("pengkor")) {
            m = s[a];
            builder.append(m);
            a++;
        }
        System.out.println(builder.toString()); 

        // loop B
        a = 0;
        builder = new StringBuilder();
        while (a < s.length) {
            m = s[a];
            if (!m.equals("pengkor")) {
                builder.append(m);
            } else {
                break;
            }
            a++;
        }
        System.out.println(builder.toString()); 

        // loop C
        builder = new StringBuilder(); 
        a = 0;
        for (m = ""; !m.equals("pengkor"); m = s[a], a++) {
            builder.append(m); 
        }
        System.out.println(builder.toString());
    }

}

最佳答案

执行此操作的一种方法是使用 boolean 值作为循环中的条件。

val lines = Source.fromPath("myfile.txt").getLines()
val builder = new StringBuilder
var cond = true
while(lines.hasNext && cond) {
  val line = lines.next
  if(line != "pengkor") {
    builder ++= line
  } else cond = false
}
//.. do something with the builder

另一种类似 scala 的方法是使用 takeWhile

val lines = Source.fromPath("myfile.txt").getLines()
val builder = new StringBuilder
lines.takeWhile(_ != "pengkor").foreach(builder ++= _)

您也可以在这里查看:How do I break out of a loop in Scala?查看处理循环中断的其他方法

关于java - 如何在读取文件时打破 Scala 中的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22728929/

相关文章:

java - Spring获取当前ApplicationContext

java - 有没有一种简单的方法可以告诉 Java Executor 在给定时刻正在运行哪些任务?

python - 将值附加到空列表的最佳实践

c# - 按 id 区分包含对象的列表

python - 如何在python中交叉2个二维数组?

方法中的 Scala 导入语句

java - 使用 Selenium 在 Chrome 上处理 "Your connection to this site is not private"弹出窗口

java - 如何在java selenium中xpath这个 "Policy"选项卡

java - 卡夫卡 : what's the best way to dynamically determine the number of partitions in a topic from the consumer side?

scala - 为什么我需要在从 java 枚举获取的 Scala 数组中显式调用 apply 方法?