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

コンピュータ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 アンケート(2)
14.7 試験
14.8 参考文献
索引

14.1 文字と文字列

14.1.1 文字

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

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

char 変数;

と書きます。

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

次のプログラムは、変数 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 k12x1001$ java CharacterTest
A
asiaa1:~/comp2b k12x1001$

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

14.1.2 文字列

これまで、文字列は、

System.out.println("OK");

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

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

String 変数;

と書きます。

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

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

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

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

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

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

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

文字列1.equals(文字列2)

と書きます。

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

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 k12x1001$ java StringInputTest
文字列を入力してください: All right.
All right.
asiaa1:~/comp2b k12x1001$

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

文字列.length()

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

文字列.charAt(番号)

とします。

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

/*  1*/ class StringPrint { // 文字列の出力
/*  2*/     public static void main (String[] args) {
/*  3*/         int i;
/*  4*/         char ch;
/*  5*/         String str = "All right.";
/*  6*/         for (i = 0; i < str.length(); i++) { // 文字数回繰り返す
/*  7*/             ch = str.charAt(i); // i番目の文字
/*  8*/             System.out.println(ch);
/*  9*/         }
/* 10*/     }
/* 11*/ }
asiaa1:~/comp2b k12x1001$ java StringPrint
A
l
l
 
r
i
g
h
t
.
asiaa1:~/comp2b k12x1001$

なお、「 文字列 」の「 番号 」番目の文字を「 文字 」に変更しようとして、

文字列.charAt(番号) = 文字; // 間違い

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

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 k12x1001$ java StringHide
文字列を入力してください: All right.
*** ******
asiaa1:~/comp2b k12x1001$

14.2 今後の予定

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

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

14.3 成績評価について

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


14.4 演習14

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

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

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

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

14.5 レポート課題

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


14.6 アンケート(2)

「学生による授業評価」アンケートに回答してください。 個別設問1は「授業の学生アシスタントまたはTAは役に立ちましたか?」とします。


14.7 試験


14.8 参考文献


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

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