' P '

whatever I will forget

Java String文字列の結合にハマる。NULLが表示されちゃう問題。

問題

String型の文字列の結合をしていると、出力結果がNULLXXXとかになってしまった。
(NULLが大文字になっているのはtoUpperCase()を行なっているためw)

原因

String str = null;ってやった後に str += input.substring(0,1)ってやってるから
初心者視点だと、現状まだnullを意識して書くような高度なコードは書けません。
なんか初期化されてませんコンパイルエラーが発生したら、とりあえずnullをセットしてたりしました。
しかし、これは値が完全に上書き(セット)されるような場合だけに有効だということがわかりました。
今回の場合のように、nullセットをしたStringオブジェクトに結合していく場合は、空文字セットが必要ということだなあ、、

解決策

  • 単純にString型objをnewして作成する
    String str = new String();
  • もしくは空文字をセットする String str = "";

参考コード

import java.util.Scanner;

public class Main2 {
  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String data = scanner.nextLine();
    String[] array = data.split(" ");
//  String output = null;     文字列結合する際は、null初期化はダメです。
    String output = new String();
    for(int i=0; i<array.length; i++) {
       output += array[i].substring(0,1);
    }
    System.out.println(output.toUpperCase());
  }
}

参考サイト

ichitcltk.hustle.ne.jp

おまけ

あと、上記コードは文字列の最初のindexを取得したい感じなんですが、
char型の配列を使う方法もあります。

その場合、

    char[] ary = new char[3];
    for(int i=0; i<array.length; i++) {
       ary[i] = array[i].charAt(0);
    }
    String output = new String(ary);

ってするとchar型配列をStringに戻すことができます。