3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Kotlin】数字⇔数値の相互変換

Last updated at Posted at 2019-10-31

数字'0''9')と数値09) の相互変換方法について。

Kotlin での方法について述べるが、他の言語でも考え方は同じ1である。

基本的な方法

半角数字 c: Char数値に変換:

c - '0'

数値 i: Int を半角数字に変換:

'0' + i

いずれも、半角数字 '0' を全角数字 '0' に置き換えることで、全角数字'0''9')と数値09)の相互変換も行える。

解説

Char 型の値は数値

Kotlin の Char 型の値は Unicode での1文字[^Unicode での1文字]を表す。

[^Unicode での1文字]: 厳密に言えば UTF-16 での1符号単位を表す。U+0000〜U+FFFF の範囲に限れば Unicode での1文字(1コードポイント)と一致する。

Unicode の各文字は U+XXXX という表記[^U+XXXX という表記]で示される。
XXXX の部分は4桁の16進数である。
例えば、半角アルファベットの 'A'U+0041'B'U+0042、ひらがなの 'あ' であれば U+3042 である。

[^U+XXXX という表記]: U+FFFF より大きい、U+10000〜U+10FFFF の範囲の文字もあるが、Char の値1つでは表せないので当記事では扱わない。

Char 型の値は内部では16ビットの数値であるため、Char.toInt などの関数で他の数値型の値に変換できる。
Char を他の数値型に変換した値は、U+XXXX の XXXX の値である。

Char の演算

Char クラスには +- の演算子が定義されている。

Char - Char -> Int

'B' - 'A' // -> 1
// ↑は↓と等価。
'B'.toInt() - 'A'.toInt()

Char + Int -> Char

'A' + 1 // -> 'B'
// ↑は↓と等価。
('A'.toInt() + 1).toChar()

Char - Int -> Char

'B' - 1 // -> 'A'
// ↑は↓と等価。
('B'.toInt() - 1).toChar()

注意

Int + CharInt - Char はできない。
Int クラスにそのような演算子が定義されていないからだ。

数字数値の相互変換

半角数字 '0''9'U+0030〜U+0039 と連続している。

そのため半角数字から半角数字 '0' を引くと、左項の半角数字が表す数値が得られる。

'1' - '0' // -> 1

また半角数字 '0'数値を足すと、右項の数値を表す半角数字が得られる。

'0' + 1 // -> '1'

全角数字 '0''9'U+FF10〜U+FF19 で連続しているので同様のことができる。

他にも数値を表すような文字や記号で Unicode コードポイントが連続しているものがあれば、同じような相互変換ができる。
しかし残念ながら漢数字は連続していないためできない。('一': U+4E00、'二': U+4E8C、…)

  1. 文字が内部では数値で表されていて演算ができるというところは同じ。扱える文字コードや演算の仕方は異なるだろう。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?