我试图找出用户的输入是十进制还是分数或混合分数,当有小数的分数时我想将小数替换为整数,这样它就是一个合适的混合分数
例如:
输入:2.23 1/2
预期产量:2 1/2
public class DecimalOrFraction {
public static void main(String args[]){
String partOfString;
String[] s = { "0000.2","2","2.222 1/2","1 2/2", "0"};
for (int x = 0 ;x<s.length;x++) {
if(s[x].matches("[1-9]{1}\\d{0,3}([.]\\d{1,3}\\s{0,1})?")){
System.out.println(x+") "+Float.valueOf(s[x])+" ---- Decimal");
}
else if(s[x].matches("[1-9]{1,5}([.]\\d{1,3})?\\s[1-9]{1}\\d{0,2}([/]\\d{0,3})?")){
partOfString = s[x].substring( s[x].lastIndexOf("."), s[x].lastIndexOf(" ")); //HAVING AN ERROR
s[x] = s[x].replace(partOfString," ");
System.out.println(x+") "+s[x]+" ---- Fraction");
}
else if(s[x].matches("[1-9]\\d{0,4}[/]\\d{0,3}")){
System.out.println(x+") "+s[x]+" ---- also Fraction");
}
else{
System.out.println(x+") "+s[x]+" ---- ERROR/Zero");
}
}
}
}
还有其他方法可以让这项工作没有任何错误吗?
答案 0 :(得分:0)
如果你最多只能有两个独立的部分,那么你可以使用String.split()并拆分“”空格。然后,如果你有两个部分,它更容易使用。如果你有一个简单的条件。我不认为这个混乱的正则表达式需要。
多种情况下,如果你有多个空格,只需针对两种情况中的任何一种,针对正则表达式调用每个结果的分割字符串,然后按照这种方式处理。
答案 1 :(得分:0)
发生错误是因为“1 2/2”中没有点来取索引 由于匹配使用RegEx,为什么不使用RegEx进行更换? 这是重构整个事情的过程。
private static final Pattern DECIMAL = Pattern.compile("\\d*\\.?\\d+");
private static final Pattern FRACTION = Pattern.compile("\\.\\d+(\\s+\\d+/\\d+)");
public static void main(String args[]) {
String[] samples = {"0000.2", "2", "2.222 1/2", "1 2/2", "0"};
for (String sample : samples) {
if (DECIMAL.matcher(sample).matches()) {
float decimal = Float.parseFloat(sample);
System.out.println(decimal + (decimal == 0 ? "\tERROR/Zero" : "\tDecimal"));
}
else {
String fraction = FRACTION.matcher(sample).replaceFirst("$1");
System.out.println(fraction + "\tFraction");
}
}
}