作成日
2016/02/13最終更新
2018/05/18記事区分
一般公開書式指定
object Main {
def main(args: Array[String]): Unit = {
println("%d + %d = %d".format(1, 1, 2)) //=> 1 + 1 = 2
}
}
文字列の比較
ヒアドキュメント
他の言語でいう「ヒアドキュメント」のようなものは """
で囲うことで実現できます。
object Main {
def main(args: Array[String]): Unit = {
println(""""ダブルクォーテーション" を含められる。""")
println("""改行が
できる。""")
println("""|インデントを
|調整できる。""".stripMargin)
}
}
文字列の連結
文字列の連結が頻繁に発生すると String インスタンスの生成コストが無視できなくなります。そのような場合は StringBuilder を用いて、最後に String に変換します。
object Main {
def main(args: Array[String]): Unit = {
println("文字列" + "の" + "連結")
val sb = new StringBuilder
for(i <- 0 to 10)
sb.append("「%d回目の連結」".format(i))
println(sb.toString)
}
}
文字列分割
object Main {
def main(args: Array[String]): Unit = {
val arr: Array[String] = "abc,xyz,ABC".split(",")
println(arr(0)) //=> abc
println(arr(1)) //=> xyz
println(arr(2)) //=> ABC
val arr2: Array[String] = """[,/]\s*""".r.split("abc, xyz/ABC") // "文字列".r => scala.util.matching.Regex
println(arr2(0)) //=> abc
println(arr2(1)) //=> xyz
println(arr2(2)) //=> ABC
val regex = """(\d{4})/(\d{2})/(\d{2})""".r
val regex(year, month, day) = "2015/01/01"
println(year) //=> 2015
println(month) //=> 01
println(day) //=> 01
}
}
改行文字で分割
object Main {
def main(args: Array[String]): Unit = {
val myLines = "line1\nline2\nline3\n"
var cnt = 0
myLines.lines.foreach { line =>
println(line) // 改行コードを含まない
cnt = cnt + 1
}
println(cnt) //=> 3
myLines.linesWithSeparators.foreach { line =>
print(line) // 改行コードを含む
cnt = cnt + 1
}
println(cnt) //=> 6
}
}
プリミティブ型に変換
object Main {
def main(args: Array[String]): Unit = {
val b: Boolean = "true".toBoolean
val i: Int = "1".toInt
val l: Long = "1".toLong
val d: Double = "1.0".toDouble
}
}
正規表現
object Main {
def main(args: Array[String]): Unit = {
// 一致するかどうかを判定
val pattern = """^\d{4}/\d{2}/\d{2}$"""
println("2016/12/31".matches(pattern)) //=> true
println("2016-12-31".matches(pattern)) //=> false
// 一致した箇所をリスト化
val regex = """\d+""".r
// val regex = new scala.util.matching.Regex("""\d+""") // としても同じ
regex.findAllIn("1999/01/01").foreach { str =>
// 三回ループ
println(str) //=> 1999 => 01 => 01
}
val list: List[String] = regex.findAllIn("1999/01/01").toList
println(list) //=> List(1999, 01, 01)
// 一致した箇所をリスト化 (複数箇所の一致)
val regex2 = """(\d{4})/(\d{2})/(\d{2})""".r
regex2.findAllIn("1999/01/01 + 2015/01/01").matchData.foreach { m: scala.util.matching.Regex.Match =>
// 二回ループ
//=> 1999/01/01 -> 1999-01-01
//=> 2015/01/01 -> 2015-01-01
println("%s -> %s-%s-%s".format(m.group(0), m.group(1), m.group(2), m.group(3)))
}
val regex3 = new scala.util.matching.Regex("""(\d{4})/(\d{2})/(\d{2})""", "year", "month", "day") // ラベル付け
regex3.findAllIn("1999/01/01 + 2015/01/01").matchData.foreach { m: scala.util.matching.Regex.Match =>
println("%s -> %s-%s-%s".format(m, m.group("year"), m.group("month"), m.group("day")))
}
// 一致した箇所を置換
println("1999/01/01".replaceAll("""\d""", "0")) //=> 0000/00/00
println("""\d+""".r.replaceAllIn("1999/01/01", {
m: scala.util.matching.Regex.Match => (m.group(0).toInt * 2).toString
})) //=> 3998/2/2
}
}
関連記事
- Scala 日付に関する処理Date クラスを文字列にフォーマット import java.util.Date object Main { def main(args: Array[String]): Unit = { // format は Date に限らない文字列用の機能です。 println("%d-%d-%d" format (1, 1, 1)) //=> 1-1-1 printl...
- 酢豚の基本的な使い方 (sbt)sbt は Scala および Java を主な対象としたビルドツールです。Scala Build Tool の略ではありませんが、Simple Build Tool という明示的な記述も公式ドキュメントなどには見当りません。以下 sbt の基本的な使用例をまとめます。使用した sbt のバージョンは 0.13 です。 公式ドキュメント [sbt 0.13](http://www.scala-sb...
- Scala 関数のサンプルコード「デフォルト引数」および「Unit 型を返す関数」 object HelloWorld { def main(args: Array[String]): Unit = { def myPrint(myArg: String = "default_value") = println(myArg + "!") val result = myPrint() //=> defau...
- Scala 組み込みの制御構造if-else 条件分岐で知られる if-else は三項演算子のようにも使用されます。 object HelloWorld { def main(args: Array[String]): Unit = { val myVal = if (!args.isEmpty) args(0) else "default" println(myVal) } ...
- Scala の基本文法Scala は JVM 上で動作するバイトコードにコンパイルできる言語です。JAVA よりも柔軟な記述ができます。事前にこちらからダウンロードおよびインストールしておいてください。基本的な文法をまとめます。 変数および定数 object HelloWorld { def main(args: Array[String]): Unit = { val constVal = 1 //