[小西ホームページ]   [目次・索引]   [前の授業]

コンピュータIIB(Javaプログラミング入門)第14回

目次
14.1 文字と文字列
14.1.1 文字
14.1.2 文字列
14.1.3 文字列の使用例
14.2 今後の予定
14.3 成績評価について
14.4 演習14
14.5 レポート課題
14.6 アンケート
14.7 試験
14.8 参考文献
索引

14.1 文字と文字列

14.1.1 文字

前々回、データ型の説明の中で、文字について触れました。 今日は、文字の使用例を紹介します。

文字型の変数 variable を宣言するには、

char variable;

と書きます。 プログラムの中で文字を表すには、その文字をシングルクオート( ' )で囲みます。 ただし、ダブルクオート( " )は '\"' , シングルクオート( ' )は '\'' , バックスラッシュ( \ )は '\\' と書きます。

次のプログラムは、変数 x に文字'A'を格納して、それを取り出すものです。

/*  1*/ class CharacterTest { // 文字のテスト
/*  2*/     public static void main (String[] args) {
/*  3*/         char x;
/*  4*/         x = 'A'; // 文字'A'を格納
/*  5*/         System.out.println(x);
/*  6*/     }
/*  7*/ }
asiaa1:~/comp2b b08a001$ java CharacterTest
A
asiaa1:~/comp2b b08a001$

文字同士を比較するには、関係演算子 == を使います。 例えば、条件 'A' == 'A' は成り立ち、条件 'A' == 'B' は成り立ちません。 さらに、文字については、関係演算子 > および < が使えます。 これは、文字符号の大小関係を意味します。 例えば、文字'A'の文字符号は65で、文字'B'の文字符号は66なので、条件 'A' < 'B' は成り立ち、条件 'A' > 'B' は成り立ちません。 関係演算子 >= (以上)、 <= (以下)、および != (等しくない)も、整数のときと同じように使えます。

14.1.2 文字列

これまで、文字列は、

System.out.println("Good afternoon!");

のように、画面出力のときのみ使ってきました。 実は、文字列を変数に格納したり、文字列から文字を取り出したりできます。 ここでは、文字列の使い方について説明します。

文字列型の変数 variable を宣言するには、

String variable;

と書きます。 プログラムの中で文字列を表すには、その文字列をダブルクオート( " )で囲みます。 ただし、文字列の中にダブルクオート( " )、シングルクオート( ' )、バックスラッシュ( \ )がある場合は、それぞれ \" , \' , \\ と書きます。

次のプログラムは、変数 x に文字列"Good afternoon!"を格納して、それを取り出すものです。

/*  1*/ class StringTest { // 文字列のテスト
/*  2*/     public static void main (String[] args) {
/*  3*/         String x;
/*  4*/         x = "Good afternoon!"; // 文字列を格納
/*  5*/         System.out.println(x);
/*  6*/     }
/*  7*/ }
asiaa1:~/comp2b b08a001$ java StringTest
Good afternoon!
asiaa1:~/comp2b b08a001$

2つの文字列を演算子 + で結ぶと、文字列が連結されます。 一方だけが文字列の場合は、他方が文字列に変換されて連結されます。

次のプログラムは、文字列"Good", " ", "afternoon", および"!"を連結するものです。

/*  1*/ class StringAppend { // 文字列の連結
/*  2*/     public static void main (String[] args) {
/*  3*/         String str1, str2, str3;
/*  4*/         str1 = "Good";
/*  5*/         str2 = "afternoon";
/*  6*/         str3 = str1 + " " + str2 + "!"; // 文字列を連結
/*  7*/         System.out.println(str3);
/*  8*/     }
/*  9*/ }
asiaa1:~/comp2b b08a001$ java StringAppend
Good afternoon!
asiaa1:~/comp2b b08a001$

文字列 str1str2 を比較するとき、 str1 == str2 と書いても思った通りになりません。 文字列のすべての文字が一致することを確かめるには、

str1.equals(str2)

と書きます。

プログラムの実行中にデータ入力を行うには、整数の場合は式

Integer.parseInt(br.readLine())

を使い、実数の場合は式

Double.parseDouble(br.readLine())

を使いました。 文字列を入力するには、単に式

br.readLine()

を書けばよいです。

/*  1*/ import java.io.*;
/*  2*/
/*  3*/ class StringInputTest { // 文字列入力のテスト
/*  4*/     public static void main (String[] args) throws IOException {
/*  5*/         InputStreamReader isr = new InputStreamReader(System.in);
/*  6*/         BufferedReader br = new BufferedReader(isr);
/*  7*/         String x;
/*  8*/         System.out.print("文字列を入力してください: ");
/*  9*/         x = br.readLine(); // 入力
/* 10*/         System.out.println(x);
/* 11*/     }
/* 12*/ }
asiaa1:~/comp2b b08a001$ java StringInputTest
文字列を入力してください: Good afternoon!
Good afternoon!
asiaa1:~/comp2b b08a001$

文字列 string の文字数(長さ)は、式

string.length()

で取り出せます。 配列の要素数の取り出し方と似ていますが、配列の場合は括弧が付きません。 また、文字列 stringindex 番目の文字を取り出すには、

string.charAt(index)

とします。

次のプログラムは、文字列"Good afternoon!"の中の文字を一つ一つ取り出して出力するものです。

/*  1*/ class StringPrint { // 文字列の出力
/*  2*/     public static void main (String[] args) {
/*  3*/         int i;
/*  4*/         char ch;
/*  5*/         String str = "Good afternoon!";
/*  6*/         for (i = 0; i < str.length(); i++) { // 文字数回繰り返す
/*  7*/             ch = str.charAt(i); // i番目の文字
/*  8*/             System.out.println(ch);
/*  9*/         }
/* 10*/     }
/* 11*/ }
asiaa1:~/comp2b b08a001$ java StringPrint
G
o
o
d
 
a
f
t
e
r
n
o
o
n
!
asiaa1:~/comp2b b08a001$

なお、文字列 stringindex 番目の文字を文字 character に変更しようとして、

string.charAt(index) = character; // 間違い

と書いても、エラーになるだけです。 文字列は、一度作成すると変更はできません。 文字列を変更するには、文字列バッファというものを利用します。 ただし、文字列バッファは多少難しいので、この授業では取り上げません。 この授業では、文字列を変更するのではなく、文字列を作り直すことにします。

14.1.3 文字列の使用例

ここで、文字と文字列を扱うプログラムの例を紹介します。

以下のプログラムは、入力された文字列の中のスペース以外を、すべて星印(*)に置き換えるものです。 アルゴリズムの要点は、文字列の中の文字を一つずつ取り出し、それがスペースでないならば星印に置き換えることです。 ただし、入力された文字列 str は変更できないので、結果の文字列 result を用意します。 str から取り出した文字がスペースならば result にスペースを連結し、そうでないならば result に星印を連結します。

/*  1*/ import java.io.*;
/*  2*/ 
/*  3*/ class StringHide { // スペース以外を星印にする
/*  4*/     public static void main (String[] args) throws IOException {
/*  5*/         InputStreamReader isr = new InputStreamReader(System.in);
/*  6*/         BufferedReader br = new BufferedReader(isr);
/*  7*/         int i;
/*  8*/         char ch;
/*  9*/         String str, result;
/* 10*/         System.out.print("文字列を入力してください: ");
/* 11*/         str = br.readLine(); // 文字列を入力
/* 12*/         result = ""; // 結果を空にする
/* 13*/         for (i = 0; i < str.length(); i++) { // 文字列の長さだけ繰り返す
/* 14*/             ch = str.charAt(i); // i番目の文字
/* 15*/             if (ch == ' ') { // 文字がスペースなら
/* 16*/                 result = result + ch; // 文字を連結
/* 17*/             } else { // そうでないなら
/* 18*/                 result = result + '*'; // 星印を連結
/* 19*/             }
/* 20*/         }
/* 21*/         System.out.println(result);
/* 22*/     }
/* 23*/ }
asiaa1:~/comp2b b08a001$ java StringHide
文字列を入力してください: Good afternoon!
**** **********
asiaa1:~/comp2b b08a001$

14.2 今後の予定

今後の予定は以下の通りです。

8月1日(日)
この日までに、レポートの提出状況をメールで知らせます。
8月4日(水)
レポートの最終締切日です。 この日以後に提出されたレポートは採点しません。

14.3 成績評価について

この授業の成績は、レポートの提出が80%, 試験の得点が20%という割合で決まります。 レポートについては、「余力のある人」のための問題にも取り組んでいれば加点します。 逆に、レポートが未提出なら、そのレポートは0点です。


14.4 演習14

入力された文字列からスペースを取り除くプログラムを作成してください。

asiaa1:~/comp2b b08a001$ java StringShorten
文字列を入力してください: This is a pen.
Thisisapen.
asiaa1:~/comp2b b08a001$ java StringShorten
文字列を入力してください: Is this a pen?
Isthisapen?
asiaa1:~/comp2b b08a001$ java StringShorten
文字列を入力してください: Yes, it is.
Yes,itis.
asiaa1:~/comp2b b08a001$

余力のある人は、スペースだけでなく、ピリオド(.)、コンマ(,)、疑問符(?)、感嘆符(!)も取り除いてください。

asiaa1:~/comp2b b08a001$ java StringShorten2
文字列を入力してください: This is a pen.
Thisisapen
asiaa1:~/comp2b b08a001$ java StringShorten2
文字列を入力してください: Is this a pen?
Isthisapen
asiaa1:~/comp2b b08a001$ java StringShorten2
文字列を入力してください: Yes, it is.
Yesitis
asiaa1:~/comp2b b08a001$

14.5 レポート課題

今日の演習12の答案(Javaプログラム)をメールで提出してください。 差出人は学内のメール・アドレス(b08a001@cis.twcu.ac.jpなど)とし、宛先はkonishi@cis.twcu.ac.jpとします。 メールの本文には、学生番号、氏名、科目名、授業日(7月23日)を明記してください。


14.6 アンケート


14.7 試験


14.8 参考文献


[小西ホームページ]   [目次・索引]   [前の授業]

2010年7月23日更新
小西 善二郎 <konishi@cis.twcu.ac.jp>
Copyright (C) 2010 Zenjiro Konishi. All rights reserved.