- ベストアンサー
java での全角数値を指定する正規表現について
はじめまして。 javaでの正規表現についての質問です。 現在私は String line = reader.readLine(); if ( line.matches("^[-]?[0-9]*[.]?[0-9]*") ) 上記のような半角の整数、浮動小数点数、マイナスの入力時にTrueとなり、それ以外はFalseとなるようにしています。 ここに「全角の整数、浮動小数点数、マイナス」もTrueとなるように記述したいのですがうまくいきません。 or 条件にて || line.matches("^[-]?[0-9]*[.]?[0-9]*") と、ただ半角の部分を全角に置き換えたところで改善するものではありませんでした。 どなたか良い改善策教えていただけましたら幸いです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
正規表現はあまり使ったことがないのではずしているかもしれませんが,Stringインスタンスに保持する文字列データはUnicodeで保持されているというようなことをどこかで読んだような気がするので,次のようにUnicodeの文字コードを16進表記で指定してみたらどうでしょうか。 line.matches("^[\u2212]?[\uFF10-\uFF19]*[\uFF0E]?[\uFF10-\uFF19]*") ちなみに全角文字をソースコードに埋め込む場合は,Javaコンパイラにソースファイルの文字コード変換が必要であることを知らせる必要があると思います。
その他の回答 (1)
- sakusaker7
- ベストアンサー率62% (800/1280)
正規表現そのものは間違っていないと思います。 import java.lang.*; public class mmm { public static void main(String[] args) { String lines[] = {"12,34", "12.34", "XXXXX" }; int max = lines.length; for (int i=0; i < max; i++) { System.out.println(lines[i] + "を試します"); if (lines[i].matches("^[-]?[0-9]*[.]?[0-9]*")) { System.out.println("マッチしました。"); } else { System.out.println("マッチしませんでした。"); } } } } 12,34を試します マッチしませんでした。 12.34を試します マッチしました。 XXXXを試します マッチしませんでした。 入力の処理の仕方に問題があるのではないでしょうか?
お礼
ご回答ありがとう御座います。 なるほど、この表記方法は思いつきませんでした。 上記記述方法でコンパイルは通ったのですが残念ながら私が思った通りの動きはしませんでしたが勉強になりました。 oscalymnk様のご回答を参考に色々といじってみたいと思います。 今のところ正規表現の前にchar型を使用し、大文字だった文字列を小文字に変換してから正規表現へ進むようにしております。