2017-01-30 11 views
2

とのマッチング:総合ステップバイステップガイドScalaのパターン私はスカラ座で プログラミングOdersky著の本からのScalaを学んでいるのgrep

このコード

object n3 { 
    def main(args: Array[String]) { 

val filesHere = (new java.io.File(".")).listFiles 
for (file <- filesHere if file.getName.endsWith(".scala")) 
    println(file) 
    } 
} 

は内のすべての.scalaファイルのリストを与えます私のフォルダ

./p6.scala 
./m9.scala 
./n1.scala 
./m6.scala 
./n4.scala 
./m3.scala 
./p5.scala 
./m2.scala 
./p9.scala 
./d7.scala 
./p7.scala 
./m7.scala 
./d5.scala 
./d14.scala 
./r12.scala 
./test.scala 
./m1.scala 
./d12.scala 
./n3.scala 
./d3.scala 
./m5.scala 
./echoargs.scala 
./m8.scala 
./d8.scala 
./d4.scala 
./r11.scala 
./d13.scala 
./p2.scala 
./p3.scala 
./d2.scala 
./n2.scala 
./p1.scala 
./d6.scala 
./p8.scala 
./p4.scala 
./Rational.scala 
./m4.scala 
./d1.scala 
./r13.scala 
./d11.scala 

私は

object n4 { 
    def main(args: Array[String]) { 

val filesHere = (new java.io.File(".")).listFiles 

def fileLines (file: java.io.File)= 
    scala.io.Source.fromFile(file).getLines().toList 

def grep(pattern: String)= 
    for(
    file <- filesHere 
    if file.getName.endsWith(".scala"); 
    line <- fileLines(file) 
    if line.trim.matches(pattern) 
) println(file +" :"+ line.trim) 

grep(".*m9.*") 
    } 
} 
次の例を試してみてください私は私が trim.matchがdo.Iになっているのか理解していないようです

[email protected]:~$ scala n4 
./n4.scala :grep(".*m9.*") 

を得た

はそれが私が./m9.scala.Whatを変更する必要がありますのみ表示されるはずと思いましたか?コードは、ファイルに内容をチェックしている

答えて

1

String.trimは、開始を削除し、空白を終了し、得られたString

.matches方法を通じて提供正規表現と比較される別の String

を返します

3

ファイルません:trim.matcheslineに呼ばれています。

ファイルn4.scalaは、パターン.*m9.*(ないm9含むすべての行)に一致する行grep(".*m9.*")を(それが1を最後から2番目のです)、含まれています。 m9.scalaを調べると、どこにでもm9が含まれていない可能性があります。

関連する問題