regexdna.scala

来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 81 行

SCALA
81
字号
/* The Computer Language Shootout   http://shootout.alioth.debian.org/   contributed by Isaac Gouy*/import java.io.InputStreamReader, java.util.regex._object regexdna {    def main(args: Array[String]) = {      var sequence = readFully()      val initialLength = sequence.length      // remove FASTA sequence descriptions and new-lines      var m = Pattern.compile(">.*\n|\n").matcher(sequence)      sequence = m.replaceAll("")      val codeLength = sequence.length      // regex match      val variants = Array (         "agggtaaa|tttaccct"         ,"[cgt]gggtaaa|tttaccc[acg]"         ,"a[act]ggtaaa|tttacc[agt]t"         ,"ag[act]gtaaa|tttac[agt]ct"         ,"agg[act]taaa|ttta[agt]cct"         ,"aggg[acg]aaa|ttt[cgt]ccct"         ,"agggt[cgt]aa|tt[acg]accct"         ,"agggta[cgt]a|t[acg]taccct"         ,"agggtaa[cgt]|[acg]ttaccct"         )      for (val v <- variants){         var count = 0         m = Pattern.compile(v).matcher(sequence)         while (m.find()) count = count + 1         Console.println(v + " " + count)      }      // regex substitution      val codes = Array (             Pair("B", "(c|g|t)")            ,Pair("D", "(a|g|t)")            ,Pair("H", "(a|c|t)")            ,Pair("K", "(g|t)")            ,Pair("M", "(a|c)")            ,Pair("N", "(a|c|g|t)")            ,Pair("R", "(a|g)")            ,Pair("S", "(c|g)")            ,Pair("V", "(a|c|g)")            ,Pair("W", "(a|t)")            ,Pair("Y", "(c|t)")         )      for (val iub <- codes){         iub match {             case Pair(code,alternative) =>                sequence = Pattern.compile(code).matcher(sequence).replaceAll(alternative)         }      }      Console.println("\n" + initialLength + "\n" + codeLength + "\n" + sequence.length)   }    def readFully() = {      val blockSize = 10240      val block = new Array[char](blockSize)      val buffer = new StringBuffer(blockSize)      val r = new InputStreamReader(System.in)      var charsRead = r.read(block, 0, blockSize)      while (charsRead > -1){         buffer.append(block,0,charsRead)         charsRead = r.read(block, 0, blockSize)      }      r.close      buffer.toString   }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?