■ はじめに
Scala の 文字列について、徐々にノウハウを書き溜めておく
目次
【0】データ変換 【1】ゼロ埋め (Zero padding) 【2】前方一致・後方一致 【3】空・空文字じゃないを判定 【4】ホワイトスペース除去 【5】文字列置換 【6】mkString 【7】文字列分割(パース) 【8】文字列の補間 (String interpolation) 1)s 補間子(The s Interpolator (s-Strings)) 2)f 補間子(The f Interpolator (f-Strings))
【0】データ変換
// to[データ型] "true".toBoolean "false".toBooleanOption // Option[Boolean] = Some(false) "100".toInt "100".toIntOption // Option[Int] = Some(100)
参考文献
https://qiita.com/ka2kama/items/004ec6baf049683938c3
【1】ゼロ埋め (Zero padding)
"%07d".format(123) // 0000123
【2】前方一致・後方一致
// 前方一致:startsWith val isS3 = "s3://your-bucket/bbb/abc.sql".startsWith("s3://") // 後方一致:endsWith val isSqlFile = "s3://your-bucket/bbb/abc.sql".endsWith(".sql")
参考文献
文字列が特定の文字列で始まるか・終わるかを調べる方法|Scalapedia
【3】空・空文字じゃないを判定
val isEmpty = "".isEmpty() val isNotEmpty = "".nonEmpty()
参考文献
http://www.mwsoft.jp/programming/scala/scala_string.html
【4】ホワイトスペース除去
val trimmedStr = " test ".trim // 前方除去 val trimmedStrLeading = " test ".stripLeading // 後方除去 val trimmedStrTrailing = " test ".stripTrailing
stripメソッドで文字列の前後の全角空白を除去する|Scalapedia
【5】文字列置換
* 基本的なことは、以下を参照。
replaceメソッドなど、文字列を置換する方法を紹介|Scalapedia
replace/replaceAllの注意点
* java.lang.Stringのreplace/replaceAllは、正規表現として解釈するので 正規表現に関わる文字はエスケープしないといけない
例
// var result = "Hi, ${{name}}!!".replaceAll("${{name}}", "Mike") // Error!! var result = "Hi, ${{name}}!!".replaceAll("\\$\\{\\{name\\}\\}", "Mike")
解決案
// Scala v2.8から「replaceAllLiterally」で置き換え可能 var result = "Hi, ${{name}}!!".replaceAllLiterally("${{name}}", "Mike")
http://blog.mwsoft.jp/article/45251515.html
【6】mkString
* 文字列連結
サンプル
val result1 = List(1, 2, 3, 4, 5).mkString //12345 println(result1) val result2 = List(1, 2, 3, 4, 5).mkString(",") // 1,2,3,4,5 println(result2) val result3 = List(1, 2, 3, 4, 5).mkString("[", ",", "]") // [1,2,3,4,5] println(result3)
【7】文字列分割(パース)
* split / splitAt / linesIterator / linesWithSeparatorsメソッド が使える
文字列を分割する方法(split・splitAt・linesIterator・linesWithSeparatorsメソッド)|Scalapedia
http://simplesandsamples.com/split.scala.html
object Hello { def main(args: Array[String]): Unit = { val str = "1,2,3,4,5," val results = str.split(",") results.zipWithIndex.foreach { case(x: String, i:Int) => println(i, x) } results.size match { case size if size >= 2 => val x1 = results(0) val x2 = results(1) println(s"${x1} - ${x2}") case _ => println("data must be more than 2") } } }
出力結果
(0,1) (1,2) (2,3) (3,4) (4,5) 1 - 2
【8】文字列の補間 (String interpolation)
1)s 補間子(The s Interpolator (s-Strings))
val name = "James" println(s"Hello, $name") // Hello, James
2)f 補間子(The f Interpolator (f-Strings))
val height = 1.9d val name = "James" println(f"$name%s is $height%2.2f meters tall")
関連記事
Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / パターンマッチング ~
https://dk521123.hatenablog.com/entry/2023/06/06/233614
Scala ~ 基本編 / コレクション ~
https://dk521123.hatenablog.com/entry/2023/03/13/000345
Scala ~ ファイル名・パスの扱い ~
https://dk521123.hatenablog.com/entry/2023/03/11/000000
Scala ~ ファイルの読み書き ~
https://dk521123.hatenablog.com/entry/2023/04/07/000000