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

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

目次
索引

文字と文字列

文字

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

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

char 変数名;

と書きます。

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

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

CharacterTest.java
class CharacterTest { // 文字のテスト
    public static void main (String[] args) {
        char x;
        x = 'A'; // 文字'A'を格納
        System.out.println(x);
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'CharacterTest'
A
PS ...\Desktop\java1>

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

文字列

これまで、文字列は、

System.out.println("OK");

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

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

String 変数名;

と書きます。

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

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

StringTest.java
class StringTest { // 文字列のテスト
    public static void main (String[] args) {
        String x;
        x = "OK"; // 文字列を格納
        System.out.println(x);
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringTest'
OK
PS ...\Desktop\java1>

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

次のプログラムは、2つの単語"All"と"right"、そしてスペースとピリオドも連結するものです。

StringAppend.java
class StringAppend { // 文字列の連結
    public static void main (String[] args) {
        String word1, word2, sentence;
        word1 = "All";
        word2 = "right";
        sentence = word1 + " " + word2 + "."; // 文字列を連結
        System.out.println(sentence);
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringAppend'
All right.
PS ...\Desktop\java1>

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

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

と書きます。

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

stdIn.nextInt()

を使い、実数の場合は式

stdIn.nextDouble()

を使いました。 文字列を入力するには、 nextString ではなく、

stdIn.nextLine()

と書きます。

StringInputTest.java
import java.util.Scanner;

class StringInputTest { // 文字列入力のテスト
    public static void main (String[] args) {
        Scanner stdIn = new Scanner(System.in);
        String x;
        System.out.print("文字列を入力してください: ");
        x = stdIn.nextLine(); // 入力
        System.out.println(x);
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringInputTest'
文字列を入力してください: All right.
All right.
PS ...\Desktop\java1>

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

文字列.length()

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

文字列.charAt(番号)

とします。

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

StringPrint.java
class StringPrint { // 文字列の出力
    public static void main (String[] args) {
        char ch;
        String str = "All right.";
        for (int i = 0; i < str.length(); i++) { // 文字数回繰り返す
            ch = str.charAt(i); // i番目の文字
            System.out.println(ch);
        }
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringPrint'
A
l
l
 
r
i
g
h
t
.
PS ...\Desktop\java1>

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

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

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

文字列の使用例

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

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

StringHide.java
import java.util.Scanner;

class StringHide { // スペース以外を星印にする
    public static void main (String[] args) {
        Scanner stdIn = new Scanner(System.in);
        char ch;
        String str, result;
        System.out.print("文字列を入力してください: ");
        str = stdIn.nextLine(); // 文字列を入力
        result = ""; // 結果を空にする
        for (int i = 0; i < str.length(); i++) { // 文字列の長さだけ繰り返す
            ch = str.charAt(i); // i番目の文字
            if (ch == ' ') { // 文字がスペースなら
                result = result + ch; // 文字を連結
            } else { // そうでないなら
                result = result + '*'; // 星印を連結
            }
        }
        System.out.println(result);
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringHide'
文字列を入力してください: Nice to meet you.
**** ** **** ****
PS ...\Desktop\java1>

以下のプログラムは、入力された文字列の中の数字以外を取り除くものです。 このプログラムでも、結果の文字列 result を用意し、入力された文字列 str から取り出した文字が数字ならば result にその数字を連結します。 数字の判定は、文字コードが'0'以上'9'以下としています。

StringDigit.java
import java.util.Scanner;

class StringDigit { // 数字以外を取り除く
    public static void main (String[] args) {
        Scanner stdIn = new Scanner(System.in);
        char ch;
        String str, result;
        System.out.print("文字列を入力してください: ");
        str = stdIn.nextLine(); // 文字列を入力
        result = ""; // 結果を空にする
        for (int i = 0; i < str.length(); i++) { // 文字列の長さだけ繰り返す
            ch = str.charAt(i); // i番目の文字
            if ('0' <= ch && ch <= '9') { // 文字が数字なら
                result = result + ch; // 文字を連結
            }
        }
        System.out.println(result);
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringDigit'
文字列を入力してください: 03(1234)5678
0312345678
PS ...\Desktop\java1>

演習13

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

StringShorten.java
import java.util.Scanner;

class StringShorten {
    public static void main (String[] args) {
        Scanner stdIn = new Scanner(System.in);
        
        
        
    }
}
ターミナル
PS ...\Desktop\java1>  & ... 'StringShorten'
文字列を入力してください: This is a pen.
Thisisapen.
PS ...\Desktop\java1>
ターミナル
PS ...\Desktop\java1>  & ... 'StringShorten'
文字列を入力してください: Is this a pen?
Isthisapen?
PS ...\Desktop\java1>
ターミナル
PS ...\Desktop\java1>  & ... 'StringShorten'
文字列を入力してください: Yes, it is.
Yes,itis.
PS ...\Desktop\java1>

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

ターミナル
PS ...\Desktop\java1>  & ... 'StringShorten2'
文字列を入力してください: This is a pen.
Thisisapen
PS ...\Desktop\java1>
ターミナル
PS ...\Desktop\java1>  & ... 'StringShorten2'
文字列を入力してください: Is this a pen?
Isthisapen
PS ...\Desktop\java1>
ターミナル
PS ...\Desktop\java1>  & ... 'StringShorten2'
文字列を入力してください: Yes, it is.
Yesitis
PS ...\Desktop\java1>

レポート課題

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


参考文献


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

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