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

情報処理技法(Javaプログラミング)I 第14回

目次
索引

文字と文字列

文字

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

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

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*/ }
24102a1:java1 k12x1001$ java CharacterTest
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
A
24102a1:java1 k12x1001$

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

文字列

これまで、文字列は、

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*/ }
24102a1:java1 k12x1001$ java StringTest
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
OK
24102a1:java1 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*/ }
24102a1:java1 k12x1001$ java StringAppend
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
All right.
24102a1:java1 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*/ }
24102a1:java1 k12x1001$ java StringInputTest
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: All right.
All right.
24102a1:java1 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*/ }
24102a1:java1 k12x1001$ java StringPrint
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
A
l
l
 
r
i
g
h
t
.
24102a1:java1 k12x1001$

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

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

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

文字列の使用例

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

以下のプログラムは、入力された文字列の中のスペース以外を、すべて星印(*)に置き換えるものです。 アルゴリズムの要点は、文字列の中の文字を一つずつ取り出し、それがスペースでないならば星印に置き換えることです。 ただし、入力された文字列 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*/ }
24102a1:java1 k12x1001$ java StringHide
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: All right.
*** ******
24102a1:java1 k12x1001$

今後の予定

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

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

成績評価について

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


演習14

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

24102a1:java1 k12x1001$ java StringShorten
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: This is a pen.
Thisisapen.
24102a1:java1 k12x1001$ java StringShorten
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: Is this a pen?
Isthisapen?
24102a1:java1 k12x1001$ java StringShorten
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: Yes, it is.
Yes,itis.
24102a1:java1 k12x1001$

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

24102a1:java1 k12x1001$ java StringShorten2
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: This is a pen.
Thisisapen
24102a1:java1 k12x1001$ java StringShorten2
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: Is this a pen?
Isthisapen
24102a1:java1 k12x1001$ java StringShorten2
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
文字列を入力してください: Yes, it is.
Yesitis
24102a1:java1 k12x1001$

レポート課題

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


アンケート(2)

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


試験


参考文献


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

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