2017-07-30 14 views
0

私は分数計算をしています、私はすでに操作のためのすべてのコードを持っています。String Fraction "2/6"を2つの整数に変換する方法は? Java

しかし、今、私はStringを取り、(分子と分母)Integers 2にStringを変換Scannerを作成したいです。

ユーザ入力Stringは、番号/番号の形式である必要があります。それ以外の場合は、スキャナを再び表示させます。

私が既に持っているコードは、Integersを処理できるので、-という記号と0は問題になりません。

答えて

1

あなたは常にこの場合/には、区切り文字に基づいて文字列を分割するString.split()を使用して、String.trim()出力をし、分子と分母を得るためにそれらを解析することができます。

0

あなたは同時に、正しいフォーマットされた文字列を施行した正規表現とパターンを使用することができ、あなたは分子とドミネーターを抽出することができます

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桁でなければなりません。スラッシュ前後のスペースは許可されます。

+0

私はこのassigmentは、基本的なJavaのコースですので、私はjava.util.regex.Matcherとjava.util.regex.Patternの持つ多くの経験を持っていない、これが最良の答えだと思います。しかし、私はこれについてさらに読むでしょう。ありがとう! – Quetzy

+0

私はこのようにしますが、行頭と行末の記号( '\\ A 'と' \\ z')ではなく、入力の始めと終わりの記号^ 'と' $ ')、あなたがそれを持っているので、' '5/5 \ n6/7" 'のような文字列もマッチします。 – tradeJmark

+0

また、名前のキャプチャグループと数字の間の任意の間隔を使用することをお勧めします(これは、あなたの受け入れ可能なフォーマットが何であるかに基づいて判断するためのものです)ので、私の場合正規表現は '' \\ A(? - ?\\ d +)[]?\\/[]?(? - ?\\ d +)\\ z "'この正規表現では、グループアクセスは 'matcher.group(" numerator ")' matcher.group( "分母") '。正規表現が変わるかどうかを簡単に追跡できます。 – tradeJmark

0

文字列を "/"に分割し、分子と分母を次のように抽出できます。

public void scan(String string){ 
if(string.matches("-{0,1}[0-9]+\\/[0-9]+"){ 
    String[] numbers = string.split("/"); 

    int numerator = Integer.parseInt(numbers[0]); 
    int denominator = Integer.parseInt(numbers[1]); 
} 
else{ 
    scan(string); 
} 
} 
+0

この場合、ユーザーが「3/12」や「/」なしで何かを入力すればどうなりますか? – Quetzy

+0

number/numberの形式でない場合、スキャンを再度呼び出す条件を追加しました。しかし、私はあなたがelse caseをどのように処理したいと思うかを理解していません。上記の方法に従えば、一致していない間は無限ループになります。 –

+0

私はelseステートメントを世話することができます、ありがとうございます。 – Quetzy

関連する問題