モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)

Scala 文字列の処理

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

公開日公開日
2016/02/13
最終更新最終更新
2018/06/18
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    Scalaはいいぞ

    0
    ステッカーを贈るとは?

    書式指定

    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
      }
    }
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Scalaはいいぞ

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • 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...
        したくんしたくん6/5/2018に更新
        いいねアイコン画像0
      • 酢豚の基本的な使い方 (sbt)
        sbt は Scala および Java を主な対象としたビルドツールです。Scala Build Tool の略ではありませんが、Simple Build Tool という明示的な記述も公式ドキュメントなどには見当りません。以下 sbt の基本的な使用例をまとめます。使用した sbt のバージョンは 0.13 です。 公式ドキュメント [sbt 0.13](http://www.scala-sb...
        ねこねこ6/30/2018に更新
        いいねアイコン画像0
      • Scala 関数のサンプルコード
        「デフォルト引数」および「Unit 型を返す関数」 object HelloWorld { def main(args: Array[String]): Unit = { def myPrint(myArg: String = "default_value") = println(myArg + "!") val result = myPrint() //=> defau...
        したくんしたくん6/26/2018に更新
        いいねアイコン画像0
      • Scala 組み込みの制御構造
        if-else 条件分岐で知られる if-else は三項演算子のようにも使用されます。 object HelloWorld { def main(args: Array[String]): Unit = { val myVal = if (!args.isEmpty) args(0) else "default" println(myVal) } ...
        したくんしたくん10/7/2021に更新
        いいねアイコン画像0
      • Scala の基本文法
        Scala は JVM 上で動作するバイトコードにコンパイルできる言語です。JAVA よりも柔軟な記述ができます。事前にこちらからダウンロードおよびインストールしておいてください。基本的な文法をまとめます。 変数および定数 object HelloWorld { def main(args: Array[String]): Unit = { val constVal = 1 //
        したくんしたくん10/7/2021に更新
        いいねアイコン画像0