今週月曜日に提出してもらった,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);
により,該当文字を追加することをおすすめします.