스칼라로 큰 텍스트 파일을 읽어야합니다. 그리고 해당 파일의 줄을 StringBuilder
. 하지만 해당 파일의 줄에 문자열이 포함되어 있으면 루프를 중단해야합니다. 그리고 그 문자열을 StringBuilder에 추가하고 싶지 않습니다. 예를 들어 Java에서 루프 A
는 "pengkor"
결과 문자열에 포함 됩니다. 루프 B
에는 해당 문자열이 포함되어 있지 않지만 루프에는 break
스칼라에서 사용할 수없는 문이 있습니다. 루프 C에서는 for
문을 사용 했지만 for
스칼라의 루프 와는 매우 다른 동작을 사용 했습니다. 내 주요 관심사는 "pengkor"
StringBuilder에 문자열 을 포함 하지 않고 파일의 크기 때문에 파일의 모든 내용을 스칼라 목록에로드하지 않는 것입니다 (스칼라 또는 다른 목록 작업의 목록 이해 목적).
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());
}
}
이를 수행하는 한 가지 방법은 루프의 조건으로 부울을 사용하는 것입니다.
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
스칼라와 같은 또 다른 방법은 takeWhile
.
val lines = Source.fromPath("myfile.txt").getLines()
val builder = new StringBuilder
lines.takeWhile(_ != "pengkor").foreach(builder ++= _)
여기에서 볼 수도 있습니다. Scala에서 루프를 어떻게 중단합니까? 루프에서 벗어나는 다른 방법을보기 위해
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다