SlideShare a Scribd company logo
Scalaの文字列処理
Day 2 リテラル・補間子・特殊な文字
リテラル
プログラム中に値を直接記述する表現
Javaではプリミティブ型(boolean, int, float,
etc.)や参照型のStringなどに存在
※Scalaにはプリミティブ型は存在しない
文字に関するリテラル
• Char
Javaが65,536 (16bit)でUnicodeの1文字を表わそ
うとしたけどサロゲートペア登場のせいで完全には
目的を果たせていない悲しいプリミティブ型charを、
参照型CharとしてScalaが引き継いだ
• String
Charの配列を扱うラッパークラス
文字コードの歴史
1800年代半ばモールス信号 1900年代初めタイプライタ標準化 1946年ENIAC
70年代    メーカごとに文字コードを策定
70年代後半∼ 言語ごとに文字コードをまとめる動きが活発化
80年代半ば  ISOが16bit固定長で世界中の文字を一つの文字集合に収めるUnicodeを構想
90年代前半  Oak言語がUnicodeを採用しchar型を16bit固定長にする
(C/C++言語のchar型は8bit固定長)
90年代半ば  1994年Oak言語がJava言語に名称変更、翌年Java言語公開
2003年    Scala言語公開
文字に関するリテラルの例
リテラル Java Scala
空リテラル
(Object)
Object n = null; val n: Object = null
文字リテラル
(Char)
char c = A ; val c: Char = A
文字列リテラル
(String)
String s =
"AB¥¥C¥nあいう";
val s: String =
"AB¥¥C¥nあいう"
生文字リテラル
(String)
val s: String =
"""AB¥C
あいう"""
Scala特有の生文字リテラル
文字列リテラル 生文字リテラル
val s: String =
"AB¥¥C¥nあいう"
val s: String =
"""AB¥C
あいう"""
val waveDash: String =
"¥u301c"
val waveDash: String =
"""¥u301c"""
生文字リテラル
stripMarginメソッド
生文字リテラルの改行のインデントを える方法
BEFORE
(普通の生文字リテラルの改行)
AFTER
(stripMarginを使用した改行)
val s: String =
 """AB¥C
あいう
イロハ"""
val s: String =
 """AB¥C
 ¦あいう
  ¦イロハ "".stripMargin
val s: String =
 """AB¥C
 %あいう
 %イロハ .stripMargin( % )
Scala特有の補間子
補間子はs補間子、f補間子、raw補間子の3種類
文字列リテラルや生文字リテラルの直前に記述
補間子はStringContextに対する暗黙クラスを定義す
ることで自分で作成可能
s補間子
val universe = "宇宙"
val result = s"生命、$universe、そして${s"万物に
ついての${"究極の"}疑問"}の答えは、${21 + 21}"
f補間子
s補間子の拡張
val result = f"サイボーグ${9}%03dVSデビルマン"
raw補間子
文字列リテラル
文字列リテラル+
raw補間子
生文字リテラル
val s: String =
"AB¥¥C¥¥nあいう"
val s: String =
raw"AB¥C¥nあいう"
val s: String =
"""AB¥C¥nあいう"""
val waveDash: String =
"¥u301c"
val waveDash: String =
raw"¥u301c"
val waveDash: String =
"""¥u301c"""
同じ???→NO
文字列リテラル+raw補間子と
生文字リテラルの違い
文字列リテラル+
raw補間子
生文字リテラル
raw"改
行"
→✖
"""改
行"""
→⭕
raw"ダブルクォーテーション「"」"
→✖
"""ダブルクォーテーション「"」"""
→⭕
補間子の作成 StringContext
implicit class JsonHelper(val sc: StringContext) extends AnyVal {
def json(args: Any*): JSONObject = {
val strings = sc.parts.iterator
val expressions = args.iterator
val buf = new StringBuffer(strings.next)
while (strings.hasNext) {
buf.append(expressions.next).append(strings.next)
}
parseJson(buf)
}
val x: JSONObject = json"{ name: $name, id: $id }"
補間子の作成 StringContext
implicit class JsonHelper(val sc: StringContext) extends AnyVal {
def json(args: Any*): JSONObject = {
val strings = sc.parts.iterator
val expressions = args.iterator
val buf = new StringBuffer(strings.next)
while (strings.hasNext) {
buf.append(expressions.next).append(strings.next)
}
parseJson(buf)
}
val x: JSONObject = json"{ name: $name, id: $id }"
new StringContext("{ name:", ",id: ", "}").json(name, id)
補間子の作成 StringContext
implicit class JsonHelper(val sc: StringContext) extends AnyVal {
def json(args: Any*): JSONObject = {
val strings = sc.parts.iterator
val expressions = args.iterator
val buf = new StringBuffer(strings.next)
while (strings.hasNext) {
buf.append(expressions.next).append(strings.next)
}
parseJson(buf)
}
val x: JSONObject = json"{ name: $name, id: $id }"
new StringContext("{ name:", ",id: ", "}").json(name, id)
new JsonHelper(new StringContext("{ name:", ",id: ", "}")).json(name, id)
補間子の作成 StringContext
implicit class JsonHelper(val sc: StringContext) extends AnyVal {
def json(args: Any*): JSONObject = {
val strings = sc.parts.iterator
val expressions = args.iterator
val buf = new StringBuffer(strings.next)
while (strings.hasNext) {
buf.append(expressions.next).append(strings.next)
}
parseJson(buf)
}
val x: JSONObject = json"{ name: $name, id: $id }"
new StringContext("{ name:", ",id: ", "}").json(name, id)
new JsonHelper(new StringContext("{ name:", ",id: ", "}")).json(name, id)new JsonHelper(new StringContext("{ name:", ",id: ", "}")).json(name, id)
エスケープシーケンス
シーケンス 意味
¥b バックスペース
¥f 改ページ
¥n 改行
¥r 復帰
¥t 水平タブ
¥¥ バックスラッシュ・半角円記号
¥ シングルクォーテーション
¥" ダブルクォーテーション
¥ooo
8進数
o [0, 7], ooo [000, 377]
Unicodeシーケンス
シーケンス 意味
¥uHHHH
HHHHは16進数のUnicodeのコードポイント
h {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F}
シーケンス例 文字
¥u3003 同上記号「〃」
¥u3005 漢字連続記号「々」
¥u3006 しめ記号「〆」
¥u3007 漢数字ゼロ「〇」
¥u301C 波ダッシュ「∼」
¥u30FB 中点「・」
¥u4EDD 同上記号「仝」
¥u599B 幽霊文字「妛」
¥u5F41 幽霊文字「彁」
¥uFF5E 全角チルダ「∼」
¥uD842¥uDFB7 野家の「 」
OS依存文字
文字 取得方法 Windows Unix
改行
System.getProperty("line.separator")
System.lineSeparator
String.format("%n")
¥r¥n ¥n
ディレクトリ
やファイルの
パスの区切り
System.getProperty("file.separator")
File.separator
¥¥ /
PATHや
CLASSPATH
の区切り
System.getProperty( path.separator")
File.pathSeparator
; :

More Related Content

PDF
Scalaの文字列処理 Day 3 コードポイントとサロゲートペア
PPTX
XMonad-oid on Emacs & More functional Emacs Lisp | 関数型LT大会
PDF
Freer Monads, More Extensible Effects
KEY
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
KEY
Algebraic DP: 動的計画法を書きやすく
KEY
ラムダ計算入門
PPTX
(Lambdaだけで) 純LISPのような ナニかを作る
PDF
Scalaの文字列処理 Day 3 コードポイントとサロゲートペア
XMonad-oid on Emacs & More functional Emacs Lisp | 関数型LT大会
Freer Monads, More Extensible Effects
How wonderful to be (statically) typed 〜型が付くってスバラシイ〜
Algebraic DP: 動的計画法を書きやすく
ラムダ計算入門
(Lambdaだけで) 純LISPのような ナニかを作る

What's hot (16)

PDF
Ruby 3の型推論やってます
PDF
すごいHaskell読書会 第7章 (前編)
PDF
関数プログラミング入門
PDF
たのしい関数型
PDF
磯野ー!関数型言語やろうぜー!
PDF
Extensible Eff Applicative
PDF
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
PDF
Scalaで萌える関数型プログラミング[完全版]
PDF
Material
PDF
Scalaで型クラス入門
PDF
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
PDF
超初心者がローマ数字をいろいろパースしてみる
PDF
Scala 初心者が Hom 函手を Scala で考えてみた
PDF
Haskell Lecture 2
PDF
C++コミュニティーの中心でC++をDISる
PDF
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
Ruby 3の型推論やってます
すごいHaskell読書会 第7章 (前編)
関数プログラミング入門
たのしい関数型
磯野ー!関数型言語やろうぜー!
Extensible Eff Applicative
「再代入なんて、あるわけない」 ~ふつうのプログラマが関数型言語を知るべき理由~ (Gunma.web #5 2011/05/14)
Scalaで萌える関数型プログラミング[完全版]
Material
Scalaで型クラス入門
型プロファイラ:抽象解釈に基づくRuby 3の静的解析
超初心者がローマ数字をいろいろパースしてみる
Scala 初心者が Hom 函手を Scala で考えてみた
Haskell Lecture 2
C++コミュニティーの中心でC++をDISる
HiroshimaJUG の 「Java8 Lambda ハンズオン with すごい広島」 を5分で振り返る
Ad

Similar to Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字 (20)

PDF
PCさえあればいい。
ODP
Scala東北紹介
PDF
ScalaでAndroidアプリ開発
PPTX
2013-12-08 西区プログラム勉強会
PDF
197x 20090704 Scalaで並行プログラミング
PDF
プログラミング言語Scala
PPT
2008.10.18 L4u Tech Talk
KEY
Beginners Scala in FAN 20121009
PPTX
ゼロから始めるScala文法 (再)
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PDF
BOF1-Scala02.pdf
PDF
言語アップデート -Scala編-
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
PDF
認証Gwのプロトタイプでgolang使ってみた20171024
PPTX
Scala勉強会
PDF
Essential Scala 第2章 式、型、値
PDF
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
PPTX
Scalamacrosについて
PDF
Clojure
PCさえあればいい。
Scala東北紹介
ScalaでAndroidアプリ開発
2013-12-08 西区プログラム勉強会
197x 20090704 Scalaで並行プログラミング
プログラミング言語Scala
2008.10.18 L4u Tech Talk
Beginners Scala in FAN 20121009
ゼロから始めるScala文法 (再)
BOF1-Scala02.pdf
BOF1-Scala02.pdf
BOF1-Scala02.pdf
言語アップデート -Scala編-
Scalaで萌える関数型プログラミング[1.1.RC1]
認証Gwのプロトタイプでgolang使ってみた20171024
Scala勉強会
Essential Scala 第2章 式、型、値
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Scalamacrosについて
Clojure
Ad

Scalaの文字列処理 Day 2 リテラル・補間子・特殊な文字