15
13

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 3 years have passed since last update.

[java] charの扱い方まとめ

Last updated at Posted at 2019-12-28

javaで競技プログラミングをする時に、char型の扱い方がややこしいと感じたので、まとめようと思った。

char型はint型にキャストできる

char型には16進数のUnicode文字が格納されている。
このとき、char型はそのUnicode文字を10進数に直した際の数値を持つ。
例えば、int型の変数にchar型の'1'を代入すれば、49という数値としてとして扱うことができる。

int c = 'a';
System.out.println(c);
//49が出力される

対応する数値からcharに変換する

(char)(数値)でその数値に対応するcharになる。

char c = (char)97;
System.out.println(c);
//'a'が出力される

char型の数字をint型に変換する

数字を羅列した文字列からString.charAt(index)で数字をchar型として取得した時など、char型の数字をint型に変換したい場合がある。
前述のように、char型をそのままint型として使おうとすると別の数値になってしまう。
この場合は、Character.getNumericValue(char c)を用いる。

char c = '1';
int value = Character.getNumericValue(c);
//value == 1

逆に、int型の数字をchar型に変換する場合は、'0'に足せば良い。

int a = 1;
char c = (char)('0'+a);
//c == '1'

char型のアルファベットを扱う

char型の'a'は97、'b'は98というように、char型のアルファベットの持つ数値は連続している。
そのため、以下のようにしてfor文で一つ一つのアルファベットを扱うことができる。

char c = 'a';
for(int i = 0; i < 26; i++){
	System.out.print(c);
	c++;
}
//abc...が出力される

文字列に各アルファベットがいくつずつ含まれているかを配列に保存することを考える。

String S = "abbcccdefg";
int[] a = new int[26];
for(int i = 0; i < S.length(); i++)
	a[S.charAt(i)-'a']++;

'a'の数値を覚えていなくても、'a'が数値として扱えるので問題ない。

15
13
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
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?