早速id:kmizushimaさんが添削してくださいました
object StringDump{ def main(args: Array[String])={ println(dump(args(0))) } def dump(str:String):String={ val buf = new StringBuffer buf append "\"" str.getBytes("UTF-8").foreach{ case 34 => buf append "\\\"" case 92 => buf append "\\\\" case n if 32 <= n && n <= 126 => buf append(new String(Array[Byte](n))) case n if n < 0 => buf append ("\\%03o" format (256+n)) case n => buf append ("\\%03o" format n) } buf append "\"" new String(buf) } }
foreachの中でいきなりcaseを書いているあたりと、
appendを使って、.() を省略しているところ、
caseのあとにifで条件を書いて、その後に関数を書いているところが違いますね。
本当は case 34 => buf.append("\\\"")を
case 34 => buf append "\\\""と書けてしまう。
Bufferでまとめて、最後にStringにするところもJava流なのかな。
私は慣れないけど、JavaでStringを連結しようとすると
大分うんざりするので、StringBufferを使うのが正解なんでしょうね。