object Main {
def main(args: Array[String]): Unit = {
println("%d + %d = %d".format(1, 1, 2)) //=> 1 + 1 = 2
}
}
『Scala の型に関する知識』をご参照ください。
他の言語でいう「ヒアドキュメント」のようなものは """
で囲うことで実現できます。
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
}
}