“如何转换字符串分数”;2/6“;变成两个整数?JAVA
我正在做一个分数计算器,我已经有了所有运算的代码 但是现在我想创建一个“如何转换字符串分数”;2/6“;变成两个整数?JAVA,java,string,integer,java.util.scanner,fractions,Java,String,Integer,Java.util.scanner,Fractions,我正在做一个分数计算器,我已经有了所有运算的代码 但是现在我想创建一个扫描器,它接受一个字符串,并将字符串转换成2个整数(分子和分母) 用户输入的字符串应采用以下格式:数字/数字。如果是别的,我会让扫描仪再次出现 我已有的代码可以处理负的整数,因此-符号和0应该不会有问题。您可以始终使用分隔符拆分字符串,在本例中为/,然后输出并解析它们以获得分子和分母。您可以始终使用基于分隔符拆分字符串,在本例中为/,然后输出并解析它们以获得分子和分母。您可以使用带正则表达式的模式,同时,强制执行正确格式的字符
扫描器
,它接受一个字符串
,并将字符串
转换成2个整数
(分子和分母)
用户输入的字符串
应采用以下格式:数字/数字。如果是别的,我会让扫描仪再次出现
我已有的代码可以处理负的
整数
,因此-
符号和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();
}
模式输入模式=
模式编译(“\\A(?-?\\d+[]*\\/[]*(?-?\\d+\\z”);
Matcher Matcher=inputPattern.Matcher(inputString);
if(matcher.matches()){
//有效输入字符串
int-numerator=Integer.parseInt(matcher.group(“分子”);
int分母=Integer.parseInt(matcher.group(“分母”);
}否则{
让扫描仪显示增益();
}
这里使用的模式包含两个命名组,用圆括号(…)标记,并用斜杠分隔(因为斜杠在正则表达式中也有含义,所以转义)
分子/分母可以以减号开头,并且应该至少包含一个数字。允许在斜杠前后使用空格。您可以使用带有正则表达式的模式,同时强制执行正确格式的字符串,并允许您提取分子和支配符:
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();
}
模式输入模式=
模式编译(“\\A(?-?\\d+[]*\\/[]*(?-?\\d+\\z”);
Matcher Matcher=inputPattern.Matcher(inputString);
if(matcher.matches()){
//有效输入字符串
int-numerator=Integer.parseInt(matcher.group(“分子”);
int分母=Integer.parseInt(matcher.group(“分母”);
}否则{
让扫描仪显示增益();
}
这里使用的模式包含两个命名组,用圆括号(…)标记,并用斜杠分隔(因为斜杠在正则表达式中也有含义,所以转义)
分子/分母可以以减号开头,并且应该至少包含一个数字。斜杠前后允许有空格。您可以在“/”上拆分字符串,并按以下方式提取分子和分母
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);
}
}
您可以在“/”上拆分字符串,并按以下方式提取分子和分母
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);
}
}
我就是这样做的:
int fTop, fBottom;
Fraction(String frak) {
fTop = Integer.parseInt(frak.substring(0,frak.indexOf('/')));
fBottom = Integer.parseInt(frak.substring(frak.indexOf('/')+1,frak.length()));
}
我就是这样做的:
int fTop, fBottom;
Fraction(String frak) {
fTop = Integer.parseInt(frak.substring(0,frak.indexOf('/')));
fBottom = Integer.parseInt(frak.substring(frak.indexOf('/')+1,frak.length()));
}
在这种情况下,如果用户输入“3/12”或没有“/”的其他内容,会发生什么情况?我添加了一个条件,如果扫描的格式不是number/number,将再次调用扫描。但我不明白你到底想怎么处理这个案子。按照上述方法将导致在不匹配期间出现无限循环。我可以处理else语句,非常感谢您的帮助。当字符串格式无效时,将导致堆栈溢出。在这种情况下,如果用户输入“3/12”,会发生什么情况或者没有“/”的其他内容?我添加了一个条件,如果扫描的格式不是number/number,它将再次调用扫描。但我不明白你到底想怎么处理这个案子。按照上述方法会导致在不匹配期间出现无限循环。我可以处理else语句,非常感谢您的帮助。当字符串格式无效时,会导致堆栈溢出。我认为这是最好的答案,我在java.util.regex.Matcher和java.util.regex.Pattern方面没有太多经验,因为本课程是针对基础java课程的。但我会读更多关于这方面的内容。谢谢我会这样做,但要使用输入的开头和结尾符号(
\\A
和\\z
),而不是行的开头和结尾符号(^
和$
),因为按照您的方式,类似于“5/5\n6/7”的字符串
也会匹配。我还建议使用命名的捕获组和数字之间的可选间距(这更像是根据您希望的可接受格式进行的判断调用),因此在我的情况下,正则表达式将变成“\\a(?-?\\d+[]?\/[](?-?\\d+\\z)”
,使用此正则表达式,组访问变为matcher.group(“分子”)
和matcher.group(“分母”)
。如果正则表达式发生变化,只需更容易跟踪即可。酷,命名组!我不知道。用你的建议更新了我的答案,谢谢。我认为这是最好的答案。我对java.util.regex.Matcher和java.util.regex.Pattern没有太多经验,因为这个帮助是为了一门基础java课程。但我会读更多关于这方面的内容。谢谢我会这样做,但要使用输入的开头和结尾符号(\\A
和\\z
),而不是行的开头和结尾符号(^
和$
),因为按照您的方式,类似于“5/5\n6/7”的字符串
也会匹配。我还建议使用命名的捕获组和数字之间的可选间距(这更像是根据您希望的可接受格式进行的判断调用),因此在我的情况下,正则表达式将变成“\\a(?-?\\d+[]?\/[](?-?\\d+\\z)”
,使用此正则表达式,组访问变为matcher.group(“分子”)
和matcher.group(“分母”)
。如果正则表达式发生变化,只需更容易跟踪即可。酷,命名组!你没看见吗