問題
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()); } }
参考サイト
おまけ
あと、上記コードは文字列の最初の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に戻すことができます。