三十三日目はなんとなく出来てきたものの…
前回(id:regasuie:20051021)から随分と変更をかけてみた。try〜catchを使わなくてもそれなりになんとかなるもんだなぁと思いつつ、どうしようもできなくなったので今日はここまで。
今回は「.」「+」「-」「*」「" "」に関する禁則については全て解決できたと思う。
public class Checker { // 正しく数字が入力されたことを判断するプログラム ver.0.007 public static boolean isNumber(String value) { //null値の判定処理 if (value == null || value.length() == 0){ return true; } //変数の宣言 int chklng = value.length(); int dot1 = value.indexOf("."); int dot2 = value.lastIndexOf("."); int plas = value.lastIndexOf("+"); int minas = value.lastIndexOf("-"); int ast = value.indexOf("*"); int blank = value.indexOf(" "); //判定処理 if(dot1 == 0 || dot2 == chklng -1) { return false; } if(dot1 != dot2) { return false; } if(plas > 0 || minas > 0) { return false; } if(ast > -1) { return false; } if(blank > -1) { return false; } return true; } }
ひたすらif文。とにかくif文。どっかに見落としありそうだけどとりあえずif文ばっかし使ってみた。
○結果
「あいうえお」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
「二十五」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
「123456」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
「−12.3456」を渡したところ、「true」が返されました。「false」が返されるようにしてほしいな。
どうにか2バイト文字(って表現でいいのかな?)の判定以外は成功に至ることができたっぽい…あれ?
ふと気になって、trueを返して欲しい文字列を少し変更してみた。
callChecker("123456", true); ↓ callChecker("123あ456", true);
これで動かしてみたところ、さっきと同じ結果を得た。てことは数字に関するところはほぼスルーされてる状態なんだな。今trueを得る条件はこんな感じかな?
- 文字列の先頭ないし末尾が「.」ではない
- 文字列に「.」が1つ以上存在しない
- 文字列の先頭以降に「+」及び「-」が存在しない
- 文字列に「*」が存在しない
- 文字列に「" "」が存在しない
こっから先は見当もつかなくなったんだけど、勉強してないだけなんだろうか…気づいてないだけだったら悔しすぎる。