質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

3774閲覧

JAVA textfieldに入力された値が数値なのか文字列なのかを判定したい

退会済みユーザー

退会済みユーザー

総合スコア0

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/08/06 06:55

編集2020/08/06 07:31

前提・実現したいこと

textfield に基本は数字のみの入力だと思いますが、たまに文字列が入る可能性があるのでifで判定したい。
取得したreturnのtrueやfalseはどう渡してifなどで使用したらいいのですか?
returnされた結果を呼び出したいです。

実行コード

isNum(txtCode.getText());

//こんな呼び出し方はないですよね・・・
if ( isCode == true) {

public boolean isNum2(String s) {
try {
Integer.parseInt(s);
return true;
} catch (NumberFormatException e) {
return false;
}
}

という方法です。

最終的には

if(--- == true ){ 

}

などで判定させたいです
---には何を指定すればいいですか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yureighost

2020/08/06 07:35 編集

あんまり普通のチェックで例外処理を使うのはお勧めできませんが、 動作自体はそれでチェックできてますね。 if文で使いたいならboolean型を返していますので、true判定なら if (isNum2(txtCode.getText())) { } false判定なら if (!isNum2(txtCode.getText())) { } で使えます。
yureighost

2020/08/06 07:34

って判定間違ってますね。 例外でやりたければ、 public boolean isNum2(String s) { try { Integer.parseInt(s); } catch (NumberFormatException e) { return false; } return true; } こうやるのが正解のはずです。
退会済みユーザー

退会済みユーザー

2020/08/06 07:41

できました!!ありがとうございます!!
退会済みユーザー

退会済みユーザー

2020/08/06 07:55

追加ですいません! false → 文字列 true → 数値 であってますか?
yureighost

2020/08/06 07:59

まあ大体その認識であってます。 int型の場合、半角数字で-2147483648から2147483647の範囲の値をサポートしていますので、 それ以外の値は例外となってfalseが返りますね。
dodox86

2020/08/06 08:21

余計なお世話ですが、'0'~'9'の10進数の数文字がいくつ入っていようがそれはあくまで文字列です。trueを返すのは、10進数の数値として扱える、つまり変換可能な文字のみが入っていたことを表しているに過ぎません。誤解が無ければそれでよいです。
退会済みユーザー

退会済みユーザー

2020/08/07 00:53

おはようございます。ご回答ありがとうございます! int型の枠を超えてしまうとfalseになってしまうところを数値であった場合は絶対にtrueにしたいのですがどうしたらよいですか?
yureighost

2020/08/07 01:54 編集

Integer.parseIntの判定に別なExceptionで処理をしたいということですかね。 https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Integer.html#parseInt-java.lang.String- 上の説明見ればわかりますがこれが投げる例外はNumberFormatExceptionのみです。 強いて言えばスーパークラスのExceptionでcatchを実装することは可能ですが、 内部的にはNumberFormatExceptionが捕捉されることには変わりません。
退会済みユーザー

退会済みユーザー

2020/08/07 02:01

説明が下手で申し訳ありません! 先程、Integer.parseIntの判定でtrueやfalseを返して結果別に個々で処理を書いているのですが、intの範囲外の場合がfalseになるので文字列判定されてしまい希望の処理になりません。Integer.parseInt内ではなくていいので、結果別の流れで例外処理を最後に追加したいと考えています!
dodox86

2020/08/07 02:01

> 連続で失礼します 本来、主旨が違う質問を追加で行うのはちょっとマナー違反とも言えるのですれども。(<どこかに書いてあるわけではないですが)別の質問として建てるべきです。質問を閉じていただくためにあえてお付き合いしますが、むしろこの場合はExceptionの種類を分ける必要はないのでは。何らかのExceptionが起きるということはすなわち数字の文字列ではない何かの要因があるということです。極端な話、nullであるとか。ですので、 try { Integer.parseInt(s); } catch (Exception e) { return false; } return true; } で充分では? くらいに思います。
dodox86

2020/08/07 02:13

質問内容が交錯してきたようですので、私は以降、コメントを控えます。
退会済みユーザー

退会済みユーザー

2020/08/07 02:21

dodox86さん ご指摘ありがとうございます。 別で質問します!
guest

回答3

0

textfieldに入力された値に対してinstanceof演算子を使えば型をチェックできます。

java

1//textfieldに入力された値 hogeがIntegerの場合trueそれ以外はfalse 2hoge instanceof Integer;

参考リンク

指摘して頂いた方々、ありがとうございます。
私の理解不足でした。。申し訳ないです。

参考までに
類似の質問

投稿2020/08/06 07:21

編集2020/08/06 08:25
June666

総合スコア290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/06 07:28

回答ありがとうございます。String や intに置き換えれば使えるということですか?? 結果はどこに入りますか??
June666

2020/08/06 07:37

そうですね。 参考リンクを見てもらうとわかるかと思うのですが。 if(hoge instanceof String) とすれば変数hogeがStringの場合にtrueをかえしてifの中に入ります。 ちなみにbooleanを返す演算子や関数はif(条件==true)とする必要はありません。
dodox86

2020/08/06 07:51

>@June666さん 多分、そういうことを質問者さんはしたいのではなくて、textfield(javax.swing のJTextFiled?)用にString型で保有する値に"12345"のような数字のみの文字列と、"#a45"のような数字ではない不正な文字列が入った場合に、数字として適切か否かを判定したいのだと思います。そのメソッドisNum2()を、外側でどう使ったらいいのか?が 本質問の主旨だと考えます。低評価は私がしたものではありませんが、恐らくその辺の取り違えが評価されたのではないかと。
June666

2020/08/06 07:57

>@dodox86さん なるほど。 私の勘違いだったようですね・・・。 ご指摘いただきありがとうございます。
yureighost

2020/08/06 08:06

後、テキストフィールドから取得される値の型は数値が入力されていたとしてもStringになりますので、その判定は使えないんですよ。 私も低評価は入れてませんが。
dodox86

2020/08/06 08:13

[2020/08/06 16:51]の私のコメントへの自己レスですが > textfield(javax.swing のJTextFiled?)用に テキストフィールドについて、本質問のタグがJavaFXなので恐らくjavafx.scene.control.TextFieldが正しいのでしょうね。(確認するまでもなく終わりそうでしたので、確認しませんでしたが) https://docs.oracle.com/javase/jp/8/javafx/api/javafx/scene/control/TextField.html
June666

2020/08/06 08:26

>@yureighostさん ありがとうございます。 おっしゃる通りです。。出直してきます・・。
guest

0

単純に「数字だけで構成されているか」をチェックしたいならこれ

java

1if (txtCode.getText().matches("\d+"))

投稿2020/08/07 05:44

swordone

総合スコア20669

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

具体的に桁数を指定してのチェックをしたいのであれば、
parse~等の例外判定に頼るより正規表現を使ってしまった方が楽だと思います。
例えばこれはマイナス符号を含めずに半角数字10文字以内であるかを判定しています。

java

1public boolean isNum2(String s) { 2 return s.matches("-?[0-9]{1,10}"); 3}

投稿2020/08/07 01:08

yureighost

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/08/07 01:25

回答ありがとうございます。 文字数判定もしたいですがそれより前に数字かa~zなどの文字が含まれているか判定したいです。 それは正規表現で可能でしょうか? 正規表現についてすこし調べてみましたが、コードが複雑でわかりませんでした・・・
yureighost

2020/08/07 01:41

この正規表現の例だと -? = (-があってもなくてもいい) [0-9] = (0から9の範囲)を {1,10} = 1から10回繰り返す と言う意味で、半角の0から9の数字があるかどうかを判定しています。 よくわからない段階で正規表現のコード表一覧とかを見ると意味がわからなくなってしまうのはわかります。 慣れればこの数字の判定ぐらいなら簡単ですし、 正規表現無しでプログラム言語から提供されている機能だけで 実装する方が大変なことも多いので是非慣れてみてください。
退会済みユーザー

退会済みユーザー

2020/08/07 01:49

なるほど!!そういう意味のコードだったのですね てっきり文字数の判定なのかと勘違いしておりました。。。 すこし試してみます!
退会済みユーザー

退会済みユーザー

2020/08/07 05:15

public boolean isCode(String s) { return s.matches("-?[0-9]{1,10}"); } で試してみたのですが、これは入力した文字の10文字以内までしか対応していないのでしょうか? 11文字目を入れるとfalse判定になります。 最初は0~9の数字を0,1,2,・・・9,と1~10回繰り返すという解釈でした。
退会済みユーザー

退会済みユーザー

2020/08/07 05:18

if (!isCode(txtCode.getText())) { //false 文字列なら何もしない s = txtCode.getText(); } else if (txtCode.getText().length() < 8 && isCode(txtCode.getText()) ) { s = "00000000" + txtCode.getText(); s = s.substring(s.length() - 8); } else if (txtCode.getText().length() >= 8 && isCode(txtCode.getText())) { s = (txtCode.getText().substring(0, 8)); } 連続と読みづらいこと、申し訳ありません。正規表現の上で行っている判定処理ですが、この中に11桁目の判定を間違って指定しているコードがありますでしょうか・・・
yureighost

2020/08/07 05:36

>これは入力した文字の10文字以内までしか対応していないのでしょうか? >11文字目を入れるとfalse判定になります。 >最初は0~9の数字を0,1,2,・・・9,と1~10回繰り返すという解釈でした。 その認識であってます。 許容する数字の文字数を増やしたい場合は {1,10} の部分の10の値を変えればよいです。
yureighost

2020/08/07 05:42

正規表現の上の判定処理についてですが、 そもそも一番上の if (!isCode(txtCode.getText())) { //false 文字列なら何もしない で数字が11桁以上であればfalseになってしまうので、 数字11桁以上を許容したいのであれば正規表現を修正するしかないですね。
退会済みユーザー

退会済みユーザー

2020/08/07 05:43

お返事ありがとうございます!ちょうどこちらも調べつつ、そこの部分を変更したらよいことに気づきました。しかしtextfieldに文字数制限をかける方法がわからないので、文字数(length)分判定したい場合はどうしたらよいのでしょうか・・・?
yureighost

2020/08/07 05:47

正規表現で数字の上限を設定したくないのであれば、繰り返し指定に+を使って下さい。 +は一回以上の繰り返しという意味で、鍵括弧で表現するなら{1,上限なし}という意味になります。 "-?[0-9]+"
退会済みユーザー

退会済みユーザー

2020/08/07 06:21

ありがとうございます!!おかげで希望通りになりました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問