如何转换字符串分数" 2/6"分成两个整数? Java的

时间:2017-07-30 18:21:44

标签: java string integer java.util.scanner fractions

我正在做一个分数计算器,我已经掌握了操作的所有代码。

但现在我想创建一个Scanner,其中String会将String转换为2 Integers(分子和分母)。

用户输入String应采用以下格式:数字/数字。如果它是别的东西,我会让扫描仪再次出现。

我已经拥有的代码可以处理否定的Integers,因此-符号和0问题会成为问题。

4 个答案:

答案 0 :(得分:1)

您始终可以使用String.split()根据分隔符(在本例中为/)分割字符串,然后String.trim()输出并解析它们以获取分子和分母。

答案 1 :(得分:1)

您可以在“/”上拆分字符串,并按以下方式提取分子和分母。

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);
 }
}

答案 2 :(得分:0)

您可以使用带有正则表达式的Pattern,同时强制使用正确的格式化字符串,并使您能够提取Numerator和Dominator:

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();
}

此处使用的模式包含两个由圆括号(..)标记的命名组,并用斜杠分隔(转义,因为斜杠在正则表达式\/中也有意义) 分子/分母可以以减号开头,并且应该包含至少一个数字。斜杠前后的空格是允许的。

答案 3 :(得分:0)

我就是这样:

int fTop, fBottom;
Fraction(String frak) {
    fTop = Integer.parseInt(frak.substring(0,frak.indexOf('/')));
    fBottom = Integer.parseInt(frak.substring(frak.indexOf('/')+1,frak.length())); 
}