• ベストアンサー

文字列が数字のみで構成されているかを判別する

アプレットで簡単な電話帳を作成しています。 電話帳の個人データの追加には氏名、電話番号を入力するというシンプルな作りなのですが、 電話番号として入力した文字列に数字(0~9)以外の文字が含まれていた場合はエラーを表示させたいのですが、何か良い方法はありませんでしょうか? 電話番号:0123456789→true 電話番号:054s2a85d4→false というような結果を返してくれるメソッドがあれば良いのですが… isDigits()というメソッドが使えそうでしたが、Javaを習い数週間なので、どうすれば良いか分からず困っています。 よろしくお願いします

noname#55441
noname#55441
  • Java
  • 回答数6
  • ありがとう数2

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

  • ベストアンサー
回答No.6

/* 正規表現はまた次の機会にしたいのならば、以下のようなアルゴリズムもある。 ただし、ちょっと長くなったかな。(それでも、電話番号ごとき5秒以上もかからないとは思うけど。) */ class TelephoneBook{  static public void main(String... num){ // JDK5   String tel1 = "0123456789";   String tel2 = "054s2a85d4";   String tel3 = "-5";   String tel4 = "5";   inputCheck(tel1);   inputCheck(tel2);   inputCheck(tel3);   inputCheck(tel4);  }  static public void inputCheck(String tel){   for(int i=0;i<tel.length();i++){    int j=0;    while(j<10){     String char_str = "";     // charを強引にString     char_str = char_str + tel.charAt(i);     // 数字だったら、すぐ隣の文字に移る。     if(char_str.equals(String.valueOf(j))) break;     j++;    }    if(j==10){     System.out.println(tel + "の入力チェック→" + false);     return; // 数字以外と分れば、すぐにチェック終了。    }   }   System.out.println(tel + "の入力チェック→" + true);  } }

その他の回答 (5)

回答No.5

混乱されているようですが class Q3461354A{ public static void main(String[] args){ /* int i = Integer.parseInt("-5"); */ String aaa = "0123456789"; if(aaa.matches("^[0-9]{10,11}$")) { System.out.println("match"); } } } で十分です。エスケープをする必要がありません

回答No.4

今回は電話番号なので >#1さんの方法でも大丈夫で はありません。 class Q3461354A{ public static void main(String[] args){ int i = Integer.parseInt("-5"); } } String.matchesは大丈夫だと思うけど。

回答No.3

すいません。 もしかしたら、こうかも。 動作環境が今ないので確認できません…。 if(aaa.matches("^[0-9]\\{10,11\\}$")) {

回答No.2

String.matches(String regex) が使えます。 このような簡単なマッチングの場合は #1さんの方法でも大丈夫です。 複雑になるとこちらの方法がいいでしょう。 正規表現でマッチするかどうかテストする方法です。 (動作は確認してません) String aaa = "0123456789"; // 与えられた文字列が 10桁以上11桁までで数字である場合 true if(aaa.matches("^[0-9]\{10,11\}$")) { // 数字に一致した場合の処理 } else { // 一致しなかった場合の処理 } 正規表現自体は ファイル名に使うワイルドカード(*.java とか ??.html みたいな)をもっと複雑にしたものです。 ここでは書ききれませんので、興味あれば調べてください。

  • neko_noko
  • ベストアンサー率45% (146/319)
回答No.1

入門書などによくある書き方で、Integer.parseInt(String s)メソッドを使う方法があります。 int i = Integer.parseInt("123"); というように、引数に文字を指定してint型(つまり数値)の値に変換して返すメソッドです。 上の例ではiに、123が入ります。 int i = Integer.parseInt("0132a"); とした場合、数値には変換できないのでNumberFormatExceptionという例外が発生します。 ※例外処理を行う必要があるので、そこは学習する必要がありますが…

関連するQ&A

  • 入力文字列が数字かどうかの判別

    キーボードから入力した文字列が数字かどうかを判別したいのです。 入力した文字列が数字ではない間、またその逆の文字列が数字の間ループさせたいのです。 ループさせないやり方(Integer.parseInt(String)で数字でなければcatchで処理する)はわかるのですが・・・ import java.io.*; class Test{ public static void main(String[] args){ String str = ""; BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); try{ do { str = br.readLine(); System.out.print("\n"); }while(strが数字の間、もしくは数字以外の間) } catch(Exception e){ System.err.println(e); } } } 上のプログラムのwhileの中で判別したいのです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • 数字を文字列に変えて頭に0を足せますか?

    データベースをエクセルに変換して、編集していたのですが、うっかり文字列にするのを忘れてしまい、電話番号の頭の0がすべて消えてしまいました。 09011111111→901111111 のような感じです。 すでにかなりいじってしまった為、一からやり直すこともできず、データベースは4000件程になっています。 電話番号の行をいまさら文字列に変えても頭の0は復活しないのですが、 これらの行を指定して、すべてのセルの数字の頭に「0」を追加する事はできますでしょうか。

  • 【Excel】文字列か数字か判断する関数ってありますか?

    お世話になっております。<(_ _)> タイトル通りなのですが、セルに入力されているものが文字列だったらTrueかFalse、またはその逆。 というように返してくれる関数ってありますか?

  • 入力された文字列の制限

    こんにちわ、初心者プログラマーのRammyと申します。 現在webで使うツールを開発中なのですが、web上にある入力フォーム内に 入力された文字列について、 1.半角英数字及び_-.のみ入力可能にする(メールアドレス判断用) 2.半角数字のみ入力可能にする(電話番号などの判断用) 3.文字列の長さをチェックし、一定の長さを超えたら送信させない 以上の入力制限処理をJAVAで行いたいのです。 現在、空白チェックのみ、チェック用のBeansを作成し、その中に public static boolean checkBlank(){  if (kind == null || user_name == null  || mail1 == null || mail2 == null  || tel == null || subject == null || text == null ) {  return false; }  if (kind .compareTo("") == 0 || user_name.compareTo("") == 0  || mail1.compareTo("") == 0 || mail2.compareTo("") == 0  || tel.compareTo("") == 0 || subject.compareTo("") == 0  || text.compareTo("") == 0 ) {  return false; } return true; } このように記述してありますが、Beans内に上記の1~3の機能をつけたし たいのです。が、いったいどのように記述したらいいのかわかりません。 1・2に関しては、入力可能な文字をあらかじめ決めておいて、入力された 文字列を分解し、入力可能文字と一致するかどうか判断する、というイメージ はできるのですが、どう書いたらいいものかわからないのです汗 3は、lengthメソッドをやはり使うのでしょうがどう書けばいいのか・・・汗 本当に初心者な質問で申し訳ないのですがご教授下さいませんでしょうか。 ヒントでもかまいませんのでご回答いただければ幸いです、宜しくおねがい 致します。

  • エクセルで半角数字には数値と文字列がある?

    http://okwave.jp/qa/q6473596.html の質問を見て私も納得がいかず質問させていただきます。 たとえば、A1セルの書式を文字列に設定してから半角で数字を打ち込むと数字は数値でなく文字列としてセルに入ります。 この入力後、A1セルの書式を標準や数値に直してもそのセルの中の数字は左に寄ったままで文字列のままでいるようです。 (でもこれをセルの中でエンターキーを押したりすると数値になってしまいますが) 次にB1セルの書式を標準あるいは数値にして数字を打ち込むと、当然のことですが数字は数値としてセルに入ります。 この入力後、B1セルの書式を文字列に変えると数字は左に寄りますから一見文字列になったように見えます。 ところが上記のセルとこのセルをA1=B1で試してみるとFALSEが返ります。 逆に同じ数字を数値として打ち込んだセルと=で試すとTRUEが返ります。 これはA1とB1は同じ文字列としての数字ではないという証拠だと思います。 B1セルの書式を標準に戻すとまた数字は右よりにもどりますから、セルの中の数字は数値のままのようです。 つまり、半角の数字にはセルの書式にかかわらず文字列と数値の二つがあるということなのでしょうか? だとしたらこの二つはどうやって区別すればいいのでしょうか?

  • 数字か文字列かを判定する関数

     JAVAの初心者です、宜しくお願いします。     テキストボックスに入力された値を、数字か文字列かを判定する関数ってありますか、VBでは「isNumeric」とかがあるのですが、JAVAではヒットしませんでした。  どこからどのように調べるのでしょうか。  いいサイトがあれば教えて下さい。

    • ベストアンサー
    • Java
  • 小文字、大文字変換

    こんにちは。 javaの勉強をやっているのでですが 思うとおりに進みません。 一文字ずつ小文字なら大文字に大文字なら小文字に変換するといったものです。 途中経過です。 import java.io.*; class Ex60{ public static void main(String args[])throws IOException{ String str3 ="0"; String output = "0"; String s1 = new String("end"); while(str3.equals(s1) == false ){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while(str3.equals(s1) == false ){ System.out.print(">"); str3 = br.readLine(); if(str3.equals(s1) == true) break; for(int i=0; i<str3.length(); i++){ char c = str3.charAt(i); if(Character.isLowerCase(c)) output = str3.toUpperCase(); else if(Character.isUpperCase(c)) output= str3.toLowerCase(); } System.out.println("入力された文字列は" + str3 + "です。"); System.out.println("大文字小文字を変換すると" + output + "です。"); } } } } /* 実行結果 >abc 入力された文字列はabcです。 大文字小文字を変換するとABCです。 >AbC 入力された文字列はAbCです。 大文字小文字を変換するとabcです。 >AAb 入力された文字列はAAbです。 大文字小文字を変換するとAABです。 */ 条件として一文字が大文字か小文字の判定にはCharacterクラスの isLowerCase()メソッド、isUpperCase()メソッド 一文字の変換はtoUpperCase()メソッド、toLowerCaseメソッドを使います。 どなたかよろしくおねがいします。

  • エクセルで表示形式で追加した文字を文字列にしたい

    エクセルで表示形式で追加した文字を文字列にしたいです。 例えば、セルに氏名を入力し、表示形式のユーザー定義で「@”様”」と入れます。そうすると氏名の後に”様”が追加されますが、今度はその「氏名+様」を文字列としたいのです。どなたかわかる方いらっしゃいますか?

  • 文字列を分断する方法

    javaに文字列をある文字で分断するようなメソッドはありますか? 例えば"abc,def"を  "abc"と"def"に分けるようなメソッドです。 JavaScriptならこれをできるのですが、javaでもできるでしょうか?

    • ベストアンサー
    • Java
  • エクセルの文字列分解

    住所録なのですが、A列に文字列で"(1)氏名(2)住所(3)電話番号(4)メールアドレス"とあります。これをB~E列に分解したいです。A列の共通の文字は(1)(2)(3)(4)です。 現状 A (1)氏名(2)住所(3)電話番号(4)メールアドレス 変更後 B     C     D       E 氏名   住所   電話番号   メールアドレス よろしくお願いします。

専門家に質問してみよう