如何将字符串分数“2/6”转换为两个整数? Java

问题描述:

我正在做一个分数计算器,我已经有了所有的操作代码。如何将字符串分数“2/6”转换为两个整数? Java

但现在我想创建一个Scanner,需要一个String并转换成(分子和分母)。

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

我已经拥有的代码可以处理负数Integers,所以-符号和0不应该成为问题。

您可以随时使用String.split()分裂基础上的分隔符字符串,在这种情况下/,然后String.trim()输出,并分析他们获得的分子和分母。

你可以使用一个正则表达式,在同一时间,实施正确的格式化字符串模式,并能够提取分子和支配:

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

这里使用的模式包含两个命名组由圆括号(..)标记,并用斜线分隔(由于斜线在正则表达式中也有含义) 分子/分母可能以负号开始,并且应该至少包含一个数字。允许斜线前后的空格。

+0

我觉得这是最好的答案,我没有与java.util.regex.Matcher中和java.util.regex.Pattern中的很多经验,因为这赋值是一个基本的Java课程。但我会阅读更多关于这个。谢谢! – Quetzy

+0

我会这样做,但是以输入开始和结束符输入('\\ A'和'\\ z')而不是起始符和结束符符号(' ^'和'$'),因为你拥有它的方式,像'5/5 \ n6/7“这样的字符串也会被匹配。 – tradeJmark

+0

我也推荐使用命名捕获组和数字之间的可选间隔(这更多的是根据你想要的可接受格式进行判断),所以在我的情况下,正则表达式将变成'“\\ A(? - 使用这个正则表达式,组访问变成了'matcher.group(“numerator”)''和''+'' matcher.group( “分母”)'。更容易跟踪正则表达式是否改变。 – tradeJmark

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

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

在这种情况下会发生什么,如果用户输入“三/ 12”或其他没有'/'的其他内容? – Quetzy

+0

我添加了一个条件,如果它不是以数字/数字的格式再次调用扫描。但我不明白你会如何处理其他情况。遵循上述方法会在不匹配时导致无限循环。 –

+0

我可以照顾其他的陈述,非常感谢你的帮助。 – Quetzy