如何将字符串分数“2/6”转换为两个整数? Java
问题描述:
我正在做一个分数计算器,我已经有了所有的操作代码。如何将字符串分数“2/6”转换为两个整数? Java
但现在我想创建一个Scanner
,需要一个String
并转换成(分子和分母)。
用户输入String
应采用以下格式:编号/编号。如果是别的,我会让扫描仪再次出现。
我已经拥有的代码可以处理负数Integers
,所以-
符号和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();
}
这里使用的模式包含两个命名组由圆括号(..)
标记,并用斜线分隔(由于斜线在正则表达式中也有含义) 分子/分母可能以负号开始,并且应该至少包含一个数字。允许斜线前后的空格。
答
您可以将字符串拆分为“/”,并按以下方式提取分子和分母。
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);
}
}
我觉得这是最好的答案,我没有与java.util.regex.Matcher中和java.util.regex.Pattern中的很多经验,因为这赋值是一个基本的Java课程。但我会阅读更多关于这个。谢谢! – Quetzy
我会这样做,但是以输入开始和结束符输入('\\ A'和'\\ z')而不是起始符和结束符符号(' ^'和'$'),因为你拥有它的方式,像'5/5 \ n6/7“这样的字符串也会被匹配。 – tradeJmark
我也推荐使用命名捕获组和数字之间的可选间隔(这更多的是根据你想要的可接受格式进行判断),所以在我的情况下,正则表达式将变成'“\\ A(? - 使用这个正则表达式,组访问变成了'matcher.group(“numerator”)''和''+'' matcher.group( “分母”)'。更容易跟踪正则表达式是否改变。 –
tradeJmark