あなたは同時に、正しいフォーマットされた文字列を施行した正規表現とパターンを使用することができ、あなたは分子とドミネーターを抽出することができます
Pattern inputPattern =
Pattern.compile("\\A(?<numerator>-?\\d+)[ ]*\\/[ ]*(?<denominator>-?\\d+)\\z");
Matcher matcher = inputPattern.matcher(inputString);
if (matcher.matches()) {
//valid inputstring
int numerator = Integer.parseInt(matcher.group("numerator"));
int denominator = Integer.parseInt(matcher.group("denominator"));
} else {
letTheScannerAppearAgain();
}
ここで使用されるパターンは2つの名前付きグループが含まれています角括弧(..)
で区切られ、スラッシュで区切られています(スラッシュは正規表現でも意味を持ちますので\/
) 数値/分母はマイナス記号で始まり、少なくとも1桁でなければなりません。スラッシュ前後のスペースは許可されます。
私はこのassigmentは、基本的なJavaのコースですので、私はjava.util.regex.Matcherとjava.util.regex.Patternの持つ多くの経験を持っていない、これが最良の答えだと思います。しかし、私はこれについてさらに読むでしょう。ありがとう! – Quetzy
私はこのようにしますが、行頭と行末の記号( '\\ A 'と' \\ z')ではなく、入力の始めと終わりの記号^ 'と' $ ')、あなたがそれを持っているので、' '5/5 \ n6/7" 'のような文字列もマッチします。 – tradeJmark
また、名前のキャプチャグループと数字の間の任意の間隔を使用することをお勧めします(これは、あなたの受け入れ可能なフォーマットが何であるかに基づいて判断するためのものです)ので、私の場合正規表現は '' \\ A(? - ?\\ d +)[]?\\/[]?(? - ?\\ d +)\\ z "'この正規表現では、グループアクセスは 'matcher.group(" numerator ")' matcher.group( "分母") '。正規表現が変わるかどうかを簡単に追跡できます。 –
tradeJmark