• ベストアンサー

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) です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.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となってしまうので、 事前にチェックする必要があるというわけです。

soccerjava
質問者

お礼

詳しい説明までしていただいてありがとうございました! 分けのわからない勘違いをしていたようです。 今後も機会があればよろしくお願いします。

その他の回答 (1)

回答No.1

id = new_id; ↑何のためにこの処理が必要ですか? 引数で受け取ったIDに初期化されていないnew_idを代入し、そのnew_idに対して操作すれば当然ぬるぽになりますよね。 public String TrimmingId(String id){ return id.trim(); } だけでいいのでは?

soccerjava
質問者

お礼

ありがとうございました。 かなり分けのわからない勘違いをしていたようです。

関連するQ&A