わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

JSPプログラミング課題のよくあるエラーとその対応

 今週月曜日に提出してもらった,JSPプログラミング課題の中間報告とスクリーンショットを見ました.
 何人か,スクリーンショットにエラー画面をつけていました.すでに解決済みかもしれませんが,対策などを書いておきます.

String w = request.getParameter("w");

でパラメータを獲得して変数wに値を入れたあと,w.length()を含む行でのエラー,という報告がありました.
 例えば最初にページにアクセスしたときは,パラメータはセットされていませんので,こういうときはwにnullが代入されます.そのときに,「w.メソッド名」の呼び出しは,例外を発生します.try~catchを入れていなければ,そこで実行時エラーとなります.
 「w.メソッド名」の呼び出しをする前に,if文を書くなどして,wがnullでないことを確認(保証)してください.
 次に,wがnullでない文字列のとき,for文で1文字ずつ取り出すのはいいのですが,

w.charAt(i) != null

という比較は,コンパイルエラーになります.char型の値は,nullと比較しないでください.
 課題の中心となるのは,wの文字を1文字ずつ見ていき,英字・数字・ひらがな・カタカナ・漢字などに振り分けることです.漢字の格納に関して,

char [] kanji = new char[100];

のように配列として宣言し,入力文字列を1文字ずつ参照して追加していくのでは,100文字を超える字数の追加があったときに,例外を発生します.
 配列をベースに処理させたければ,

ArrayList<Character> kanji = new ArrayList<>();

と書くことで,要素数の上限を気にしなくて済みます.要素の追加は

kanji.add(w.charAt(i));

とすればいいのです(w.charAt(i)の結果はchar型ですが,CharacterのArrayListに入れることができます.「オートボクシング」を自習してください).なのですが,ArrayListを使って書くと,出力のためのコードで,苦労します.
 この件は愚直に,文字列変数に格納してください.

String kanji = "";

と宣言し,

kanji += w.charAt(i);

により,該当文字を追加することをおすすめします.