Java初心者です。
いつも大変お世話になっております。
入力した値[金額]に対して自然数の入力チェックを行いたいのですが、
うまくいかないのでお力を貸してくださいよろしくお願いいたします。
質問は以下の2点です。
・2つ目のソースコードではうまく処理できるのですが、一つ目のソースコードでも同様に行うには
どうしたらよいのでしょうか。
・2つ目のソースコードでは[+100]のような表記ができるようにしたいのですが、
("^[+]|0|^[1-9]\d*|^[1-9]\d{0,2}((,\d{3})*)$")としてもプラスを反映させられなくて困っております。
*また正規表現でいう+の記号は1回以上の繰り返しと認識しているのですが、そもそも+を表現することは可能なのでしょうか。
条件は以下の通りで行っております。
・自然数には0以上の数が入力可能。
・-、小数点が入力されたらエラー
・文字は一文字でも入力されていたらエラー
・カンマの入力は可能。(1,000などの表記は可能)
・数字の前後に空白が入力されていたら取り除く
表示結果がわかりやすいように各System.out.println();でメッセージを出力しています。
###発生している問題・エラーメッセージ
1つめのソースコードで1つでも文字を含んでいたらNGを表示してtrueを返したいが数字を含んだものは通常処理が行われてしまう。
###該当のソースコード
java
1import java.util.Scanner; 2public class Res2 { 3 public static void main (String[] args) { 4 Scanner sc = new Scanner(System.in); 5 System.out.print("金額を入力してください"); 6 String val = sc.next(); 7 8 if (isNotNaturalNumber(val)) { 9 System.out.println("金額には自然数を入力してください"); 10 } else { 11 System.out.println(val); 12 } 13 } 14 15 /** 16 * 自然数のチェック 17 * @param val チェックする値 18 * @return True:エラー、False:正常 19 */ 20 private static boolean isNotNaturalNumber(String val ) { 21 assert val != null; 22 // マイナスおよび小数点は認めない 23 if ((val.indexOf(".") >= 0) 24 || (val.indexOf("-") >= 0)) { 25 System.out.println("指定外です"); 26 return true; 27 28 } 29 // 文字は認めない 30 if (val.matches("(\D)*")) { 31 System.out.println("NG"); 32 return true; 33 } 34 // カンマがあった場合は取り除いてチェックする 35 if (val.indexOf(",") >= 0) { 36 val = val.replace(",", ""); 37 System.out.println("変換します:"+ val); 38 } 39 40 // 空白処理 41 if (val.equals(val.trim())) { 42 System.out.println("空白処理しました"); 43 } 44 return false; 45 } 46} 47
java
1 // 正の整数とカンマ以外は認めない 2 private static boolean isNotNaturalNumber(String val ) { 3 assert val != null; 4 if (!(val.matches("0|^[1-9]\d*|^[1-9]\d{0,2}((,\d{3})*)$"))) { 5 return true; 6 } else { 7 System.out.println("ok"); 8 } 9 // 空白処理 10 if (val.equals(val.trim())) { 11 System.out.println("空白処理しました"); 12 } 13 return false; 14 } 15
###補足情報(言語/FW/ツール等のバージョンなど)
java
環境 eclips Oxygen.1a Release (4.7.1a)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/15 23:17
2018/01/15 23:26
2018/01/16 13:12