メインコンテンツへスキップ

【Java勉強-第4回】キーボード入力と文字列の連結

·☕5分
#テック系 #Java
Rakuichi
著者
Rakuichi
ヴィッセルサポのIT屋
目次
Java入門 - こちらの記事はシリーズ掲載です
Part 4: 本記事

Java勉強記録第3回の今回は、キーボード入力と、文字列の連結についてまとめていきます。文字列の連結の仕方を工夫しないと、データ量が増えたときに処理が遅くなったりしますからね。

キーボード入力の受付
#

Javaのキーボード入力の受付には、java.util パッケージの Scanner クラスを用います。

今回の入力には以下の3つのメソッドを利用しています。

  • nextInt():整数型の入力
  • nextDouble():少数型の入力
  • nextLine():文字列の入力

ここで、気をつけないといけないことはnextInt()nextDouble()で数字を読み込んだ際に、改行文字(Enterを押すため)が残る点です。

そのままnextLine()を使うと、その改行文字を読み込んで処理が終わってしまいます。ですので、nextLine()を間に一度入れることで空読みを行い、この問題を解決します。

import java.util.Scanner;

public class Keybord{

    public static void main(String[] args){

        // Scannerクラスの呼び出し
        Scanner scan = new Scanner(System.in);
        // 数値の入力
        System.out.print("int型を入力:");
        int num1 = scan.nextInt();
        System.out.print("duble型を入力:");
        double num2 = scan.nextDouble();

        // 空読み
        scan.nextLine();
        // 文字列の入力
        System.out.print("String型を入力:");
        String strin = scan.nextLine();

        // 入力の確認
        System.out.println("【入力の確認】");
        System.out.println("int型:" + num1);
        System.out.println("double型:" + num2);
        System.out.println("String型:" + strin);
    }
}

このプログラムを実行した結果が以下のとおりです。うまく機能していることを確認できました。

int型を入力:1
duble型を入力:10.0
String型を入力:vissel
【入力の確認】
int型:1
double型:10.0
String型:vissel

文字列の連結
#

文字列の連結には下記の通りいくつか種類があります。

  • プラス演算子
  • concat()
  • join()
  • StringBuffer
  • StringBuilder

プラス演算子や、concat()の他にも、StringBufferやStringBuilderといったクラスを利用することで連結することができます。StringBufferやStringBuilderの2つの違いに関しては以下の記事を参考にしていただければ良いと思います。

今回はとりあえず一般的に処理が早いStringBuilderを利用します。

参考サイト:文字列操作 スレッドセーフ vs パフォーマンス StringBuilder

プラス演算子や、concat()による連結処理は重いみたいです。特にプラス演算子でつなげるとめちゃくちゃ遅いみたいですね。今回、時間は計測していませんが、以下のQiitaの記事を見るとプラス演算子がいかに遅いかがわかると思います。

参考サイト: 【Java】文字列結合の速度比較

プラス演算子
#

つなげたい変数や文字列を+でつなぎます。

public class StringJoin {

    public static void main(String[] args) {
        // 文字列の連結
        String s1, s2, s3, sjoin;
        s1 = "ヴィッセル神戸";
        s2 = "天皇杯";
        s3 = "優勝";

        System.out.printf("s1 = %s\n", s1);
        System.out.printf("s2 = %s\n", s2);
        System.out.printf("s3 = %s\n", s3);

        // プラスで
        sjoin = s1 + s2 + s3;
        System.out.println("\nプラス演算子");
        System.out.println(sjoin);
    }
}

出力結果は以下のとおりです。

s1 = ヴィッセル神戸
s2 = 天皇杯
s3 = 優勝

プラス演算子
ヴィッセル神戸天皇杯優勝

concat()
#

s1に対してs2を連結させたい場合はs1.concat(s2)とします。

public class StringJoin2 {

    public static void main(String[] args) {
        // 文字列の連結
        String s1, s2, s3, sjoin2;
        s1 = "ヴィッセル神戸";
        s2 = "天皇杯";
        s3 = "優勝";

        // concat
        sjoin2 = s1.concat(s2);
        sjoin2 = sjoin2.concat(s3);
        System.out.println("\nconcat");
        System.out.println(sjoin2);
    }

}

出力結果は以下のとおりです。

concat
ヴィッセル神戸天皇杯優勝

join()
#

join()を用いることで、複数の文字列型を一つにつなげることができます。第一引数に設定した値が、連結する文字型の間に入ります。

public class StringJoin3 {

    public static void main(String[] args) {
        // 文字列の連結
        String s1, s2, s3;
        s1 = "ヴィッセル神戸";
        s2 = "天皇杯";
        s3 = "優勝";

        // joinメソッド
        String sjoin3 = String.join("-", s1, s2, s3);
        System.out.println("\njoin");
        System.out.println(sjoin3);
    }

}

出力結果は以下のとおりです。

join
ヴィッセル神戸-天皇杯-優勝

StringBuilder
#

StringBuilderクラスを用いて、append()していくことで連結できます。

public class StringJoin4 {

    public static void main(String[] args) {
        // 文字列の連結
        String s1, s2, s3;
        s1 = "ヴィッセル神戸";
        s2 = "天皇杯";
        s3 = "優勝";

        // StringBuilder append
        StringBuilder sjoin4 = new StringBuilder();

        sjoin4.append(s1);
        sjoin4.append(s2);
        sjoin4.append(s3);

        System.out.println("\nStringBuilder append");
        System.out.println(sjoin4);
    }

}

出力結果は以下のとおりです。

StringBuilder append
ヴィッセル神戸天皇杯優勝

まとめ
#

キーボードからの入力の受け取りと、文字列の連結についてまとめました。正直な感想は、「Pythonの方がええなぁ」です(笑)。

とはいっても、システムを作る時にJavaの良さが生きるときもあると思うので、しっかり理解していきたいと思います。

Java入門 - こちらの記事はシリーズ掲載です
Part 4: 本記事

スポンサードリンク

Related

【Java勉強-第3回】簡単なif・else文
·☕3分
#テック系 #Java
【Java勉強-第2回】変数について
·☕5分
#テック系 #Java
【Java勉強-第1回】EclipceでHello World!
·☕3分
#テック系 #Java
miseとpoetryでPython環境構築 + miseのtask利用
·☕5分
#テック系 #mise #Python #Poetry #Streamlit #環境構築