- ベストアンサー
Javaのクラス作成について。
現在、Javaで新規クラスを作成しています。 「String型の変数を受け取ってトリミングしてString型で返す」と言うプログラムを作成したいのですが、なかなかうまくいきません。 現在、考えているのは --- Trimming.java --- public class Trimming{ String new_id; public String TrimmingId(String id){ id = new_id; String idtrim = new_id.trim(); idtrim = id; return id; } } --- Test.java --- class Test{ public static void main(String[] args) { String id = " Trimming "; Trimming ID = new Trimming(); System.out.println(ID.TrimmingId(id)); } } --- 現在、出ているエラーは Exception in thread "main" java.lang.NullPointerException at Trimming.TrimmingId(Trimming.java:6) at Test2.main(Test2.java:6) です。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
--- Trimming.java --- 01:public class Trimming{ 02: String new_id; 03: 04: public String TrimmingId(String id){ 05: id = new_id; 06: String idtrim = new_id.trim(); 07: idtrim = id; 08: return id; 09: } 10:} --- Test.java --- 01:class Test{ 02: public static void main(String[] args) { 03: String id = " Trimming "; 04: Trimming ID = new Trimming(); 05: 06: System.out.println(ID.TrimmingId(id)); 07: } 08:} Trimming.javaの5行目では、もらった引数idに、 自身で元々持っているnew_idを代入してしまったので、 この時点でもらった引数は失われています。 new_idは宣言されたまま何も値を入れていないので内容はnullであり、 new_id.trim()の呼び出しはNullPointerExceptionになります。 代入式の右辺と左辺がやりたいことの逆になっていませんか? それ以降の行を見ても、そんな感じがします。 ちなみにTrimming.javaがなくても、Test.javaだけで十分かと思います。 --- Test.java --- 01:class Test{ 02: public static void main(String[] args) { 03: String id = " Trimming "; 04:// Trimming ID = new Trimming(); 05: 06:// System.out.println(ID.TrimmingId(id)); 07: System.out.println(id.trim()); 08: } 09:} ただtrim結果を表示できればいいだけでなく、 あえてTrimmingを使って結果を保持したいのであればこうでしょう。 --- Trimming.java --- 01:public class Trimming{ 02: String new_id; 03: 04: public String TrimmingId(String id){ 05:/* 06: id = new_id; 06: String idtrim = new_id.trim(); 07: idtrim = id; 08: return id; 09:*/ 10: if(id == null) { 11: new_id = null; 12: } 13: else { 14: new_id = id.trim(); 15: } 16: return new_id; 17: } 18:} 10行目でこのような判定をするのは、例外発生を防ぐためです。 TrimmingIdメソッドの立場からすれば、渡された引数idがnullでない保証はないわけで、 うっかりそのままid.trim()を実行すればやはりNullPointerExceptionとなってしまうので、 事前にチェックする必要があるというわけです。
その他の回答 (1)
- ProKaseifu
- ベストアンサー率51% (98/192)
id = new_id; ↑何のためにこの処理が必要ですか? 引数で受け取ったIDに初期化されていないnew_idを代入し、そのnew_idに対して操作すれば当然ぬるぽになりますよね。 public String TrimmingId(String id){ return id.trim(); } だけでいいのでは?
お礼
ありがとうございました。 かなり分けのわからない勘違いをしていたようです。
お礼
詳しい説明までしていただいてありがとうございました! 分けのわからない勘違いをしていたようです。 今後も機会があればよろしくお願いします。