1

この記事の目次



このページは「JAVAの文字列」の演習問題です。「JAVAの文字列」の基礎を学びたい方はこちらで参考してください。

1.  文字列の比較


問題:2つの文字列をキーボードから入力して、比較する

条件 : compareTo()compareToIgnoreCase()どちらも使って比較すること。

解答例
package helloworld;

import java.util.Scanner;

public class HelloWorld {
     
    public static void main(String[] args) {
        
        String str1, str2;
        int result;
        Scanner scanner = new Scanner(System.in);

        System.out.print("1つ目の文字列: ");
        str1 = scanner.nextLine();
        System.out.print("2つ目の文字列: ");
        str2 = scanner.nextLine();

        System.out.print("compareTo()で比較した場合: ");
        result = str1.compareTo(str2);
        if (result < 0) {
            System.out.println("「" + str1 + "」 < 「" + str2 + "」");
        } else if (result > 0) {
            System.out.println("「" + str1 + "」 > 「" + str2 + "」");
        } else {
            System.out.println("「" + str1 + "」 = 「" + str2 + "」");
        }

        System.out.print("compareTo()で比較した場合: ");
        result = str1.compareToIgnoreCase(str2);
        if (result < 0) {
            System.out.println("「" + str1 + "」 < 「" + str2 + "」");
        } else if (result > 0) {
            System.out.println("「" + str1 + "」 > 「" + str2 + "」");
        } else {
            System.out.println("「" + str1 + "」 = 「" + str2 + "」");
        }
    }
  
}

実行結果:
1つ目の文字列: hello
2つ目の文字列: HeLLo
compareTo()で比較した場合: 「hello」 > 「HeLLo」
compareTo()で比較した場合: 「hello」 = 「HeLLo」
説明 : 結果から見ると、compareTo()は大文字と小文字を区別して、比較しますが、compareToIgnoreCase()は大文字と小文字を区別せずに比較します。

 equals、compareTo()、compareToIgnoreCase()で文字列の比較について詳しく見たい方:

equals、compareTo()、compareToIgnoreCase()で文字列の比較

../../../java/java-string.html?goto=2to2

StringクラスといえばJavaで頻繁に使うクラスの一つかと思います。 この記事では、Stringクラスについて 、Stringクラスとは、文字列の取り扱い、文字・・・

2.  文字列から特定の文字が出現する回数


問題:宣言した文字列の中に、特定の文字がいくつ含められているか確認する。

条件 : substringとcharAtメソッドをどちらも使うこと。

ヒント : 番目を1ずつ確認するため、for文を使って、文字列の0番目から「文字列の長さ-1」番目まで繰り返し確認する。

解答例
package helloworld;
 
public class HelloWorld {
      
    public static void main(String[] args) {
         
        String str = "学生は学校に行くべきですが、夏休み中は学校に行かなくても大丈夫です。";
        char character = '学';
        int count1 = 0;
        int count2 = 0;
        
        // charAtメソッドで確認する。
        for (int i = 0; i < str.length(); i++) {
            // 特定の文字は元の文字列のi番目の文字と一致すれば、countを1増やす。
            if (str.charAt(i) == character) {
                count1++;
            }
        }
        
        // substringメソッドで確認する。
        for (int i = 0; i < str.length(); i++) {
            // 特定の文字は元の文字列のi番目の文字と一致すれば、countを1増やす。
            if (str.substring(i,i+1).equals(String.valueOf(character))) {
                count2++;
            }
        }
        
        System.out.println("元の文字列: " + str);
        System.out.println("charAtの確認で「" + character + "」の出現する回数: " + count1);
        System.out.println("substringの確認で「" + character + "」の出現する回数: " + count2);
             
    }
   
}

実行結果:
元の文字列: 学生は学校に行くべきですが、夏休み中は学校に行かなくても大丈夫です。
charAtの確認で「学」の出現する回数: 3
substringの確認で「学」の出現する回数: 3

説明:

  • charAtメソッドの出力はchar型ですので、char型のcharacter変数と比較するときに、==演算子を使ってもいいです。
  • substringメソッドの出力はStringクラスの値ですので、char型のcharacterと比較するときに、character変数をStringクラスの値に変換する必要があり、String.valueOfメソッドを利用しました。
  •  substring、charAtで範囲を切り出すについて詳しく見たい方:

    substring、charAtで範囲を切り出す

    ../../../java/java-string.html?goto=2to7

    StringクラスといえばJavaで頻繁に使うクラスの一つかと思います。 この記事では、Stringクラスについて 、Stringクラスとは、文字列の取り扱い、文字・・・

    3.  文字列の各文字の出力


    問題:宣言した文字列の各文字をコンソールに出力する。

    ヒント : charAtメソッドかsplitメソッドを使用する。

    解答例
    package helloworld;
     
    public class HelloWorld {
          
        public static void main(String[] args) {
             
            String str = "学生は学校に行くべきです。";
            
            System.out.println("元の文字列: " + str);
            
            System.out.print("charAtメソッドを使用した場合、元の文字列から各文字: " );
            //charAtメソッドを使用する
            for (int i = 0; i < str.length(); i++) {
                System.out.print(" " + str.charAt(i));
            }
            
            System.out.print("\nsplitメソッドを使用した場合、元の文字列から各文字: " );
            //splitメソッドを使用する
            String[] array = str.split("");
            for(String n :  array){
                System.out.print(" " + n);
            }
                
        }
       
    }

    実行結果:
    元の文字列: 学生は学校に行くべきです。
    charAtメソッドを使用した場合、元の文字列から各文字:  学 生 は 学 校 に 行 く べ き で す 。
    splitメソッドを使用した場合、元の文字列から各文字:  学 生 は 学 校 に 行 く べ き で す 。

    説明:

  • 前の問題のように、charAtメソッドを利用しました。
  • splitメソッドを使用して、元の文字列から空文字で分割し、データを配列で受け取るメソッドです。
  • 配列の取り扱いは下の記事「JAVAの配列」をご覧ください。
  •  splitで分割について詳しく見たい方:

    splitで分割

    ../../../java/java-string.html?goto=2to6

    StringクラスといえばJavaで頻繁に使うクラスの一つかと思います。 この記事では、Stringクラスについて 、Stringクラスとは、文字列の取り扱い、文字・・・

     JAVAの配列について詳しく見たい方:

    JAVAの配列

    ../../../java/java-array.html

    配列とは、同じ型の複数の値をまとめて一つの変数として扱うことができるデータ構造です。この記事では配列の宣言、初期化、追加などの基本操・・・

    4.  文字列の無駄な空白の削除


    問題:宣言した文字列の中から無駄な空白(半角)を削除する。

    ヒント : 文字列の無駄な空白は文字列の先頭と末尾にある空白と、連続空白です。先頭と末尾の空白の取り除くのはWhile文を使いましょう。

    解答例
    package helloworld;
     
    public class HelloWorld {
          
        public static void main(String[] args) {
             
            String str = "  i love  you     so much   !    ";
            int count = 0;
            
            System.out.println("元の文字列: 「" + str + "」");
            
            //先頭の空白を取り除く
            while(str.charAt(0) == ){//char型の文字は必ず「'」で囲まれる。
                str = str.substring(1);
            }
            
            //末尾の空白を取り除く
            count = str.length();
            while(str.charAt(count - 1) == ){//char型の文字は必ず「'」で囲まれる。
                str = str.substring(0,count - 2);
                count = str.length();
            }
            
            //文字列の真ん中の無駄な空白を取り除く
            while(str.contains("  ")){
                str = str.replace("  ", " ");
            }
            
            System.out.println("整理した文字列: 「" + str + "」");
                
        }
       
    }

    実行結果:
    元の文字列: 「  i love  you     so much   !    」
    整理した文字列: 「i love you so much !」

    説明:

  • 先頭の空白の取り除く:先頭の文字は空白である間、元の文字列をその文字列の2番目の文字(JAVAでは1番目になる)から最後までの文字列に換える
  • 末尾の空白を取り除く:文字列の最後の文字は空白である間、文字列をその文字列の先頭の文字から最後の1個前の文字までの文字列(JAVAでは0番目から文字列の長さ-2までの文字列)に変える
  • 文字列の真ん中の無駄な空白を取り除く:” ”という2連続空白が存在している間、replaceメソッドで元の文字列の2連続空白を1空白に変える
  • 5.  英語の文字列をワードずつに分ける。


    問題:英語の文字列をワードずつに分けて、1行ずつ表示する。

    解答例
    package helloworld;
    
    public class HelloWorld {
          
        public static void main(String[] args) {
             
            String str = "i love you so much";
            char character ;
            
            System.out.println("元の文字列: 「" + str + "」");
            System.out.println("ワードに分けた:");
            
            for (int i = 0; i < str.length(); i++) {
                
                character = str.charAt(i);//strのi番目の文字をcharacterに代入する
    
                if (character == ) {
                    System.out.println();
                } else {
                    System.out.print(character);
                }
                
            }
        }
    }

    実行結果:
    元の文字列: 「i love you so much」
    ワードに分けた:
    i
    love
    you
    so
    much

    説明:

  • 無駄な空白がない英語文字列において、空白である文字列の番目に改行したら、ワードごろに出力することができます。
  • 上の解答例以外は、splitメソッドでワードに分けることができます、str.split(" ")のコードを利用すればいいです。
  • 6.  まとめ


    ここまでは文字列を取り扱うメソッドをたくさん紹介しましたが、使い方はある程度理解していただきましたでしょうか。lengthメソッド、equalsメソッドsplitメソッドなどはよく使われますので、使い方や構文を覚えておいてください。

    広告