文字とアスキーコード

コンピュータの内部では整数や実数だけでなく文字も数値として扱われています。そこでコンピュータでは、整数値と文字を対応させて文字情報を処理しています。文字に対応付けられた数をアスキーコードといいます。 たとえば、次のコードは、文字と対応するアスキーコードを表示します。

char ch = 'A';
System.out.println(ch + " = " + (int)ch);
	
int num = 122;
System.out.println((char)num + " = " + num);

char 型の変数は、(int)によって整数にキャスト(型変換)することで、数値(コード)として出力することができます。また、int 型の変数は、(char)によって文字にキャストすることで、対応する文字を出力することができます。 上のコードの標準出力は次の通りです。

A = 65
z = 122

これは、文字 'A' のアスキーコードが 65 であり、アスキーコード 122 に対応する文字が 'z' であることを示しています。つまり、'B', 'C', ... のアスキーコードが66, 67, ... で、'a', 'b', 'c', ... のアスキーコードが97, 98, 99, ... となることが分かります。

文字列

文字の並びを文字列と呼びます。Stringは文字を管理するクラスです。基本型と同様に、初期値を設定して文字列の変数を宣言することができます。文字列の長さは、当該文字列のlengthメソッドで取得できます。charAtメソッドで、文字列の指定された場所の文字を取得することができます。これらのメソッドは、. (ドット) 演算子で呼び出します。たとえば、String クラスのオブジェクトlineから、1文字ずつ文字を読み込むには、以下のように書きます。

String line = "Hello World";               // 初期値を設定してString型の変数を宣言
for ( int i = 0; i < line.length(); i++ ){ // 文字列の長さ分だけ繰り返す
    char ch = line.charAt(i);              // 文字列lineのi文字目を取得
    System.out.print(ch);
}
System.out.println();
// Hello World が出力される

1行の文字列の入力

1行の文字列を読み込むには、ScannerのgetLineメソッドを用いることができます。たとえば、以下のように記述することができます:

Scanner sc = new Scanner(System.in);
String line = sc.nextLine();           // 標準入力から1行の文字列を入力

文字の判定

文字が(アスキーコードによって)数値で表されていること、アルファベットには連続した数値が割り当てられていることを利用すると、文字の比較や変換は、数値と同じように行うことができます。たとえば、

'a' <= ch && ch <= 'z'

を満たせば、文字chは英小文字です。また、'a'と'A'の差('a' - 'A')が32であることから、chが小文字の場合は32を引くことにより対応する大文字に変換することができます。一方、chが大文字の場合は32を加算することにより対応する小文字を得ることができます。

たとえば、このような計算をして、小文字を大文字に変換するには、以下のように書くことができます。

if ( 'a' <= ch && ch <= 'z') System.out.print((char)(ch - ('a' - 'A')));

また、以下のように、Characterクラスを利用することで、文字の種類を判定したり、変換するメソッドを使うことができます。

import java.util.Scanner;

class Main{
    public static void main(String[] a){
	Scanner sc = new Scanner(System.in);
	char ch = sc.next().charAt(0);

	if ( Character.isDigit(ch) ) System.out.println("digit");
	if ( Character.isAlphabetic(ch) ) System.out.println("alpha");
	if ( Character.isLowerCase(ch) ) System.out.println(Character.toUpperCase(ch));
	if ( Character.isUpperCase(ch) ) System.out.println(Character.toLowerCase(ch));
    }
}

このプログラムは、1つの文字を入力し、それが数字なら"digit"、アルファベットの文字なら"alpha"と出力し、さらに英小文字なら対応する大文字を、大文字なら対応する小文字を出力します。


Reference

 

オンラインジャッジではじめるC/C++プログラミング入門 (マイナビ)

AIZU ONLINE JUDGE のコース問題を題材にした解説書です。各トピックごとに C/C++ 言語の基礎的な内容を学習し、Introduction to Programming の演習問題にチャレンジしていきます。内容は敷居の高いものではなく、プログラミング初学者が取り組む例題からスタートしています。