我在java中遇到这个问题。当我写3/5 + 3时它返回18/5并且它是正确的但如果我写3/5 / + 3它返回18/5而不是错误
public static RatNum parse(String s) {
int x = 0;
int y = 0;
String split[] = s.split("/");
if (split.length == 2) {
x = Integer.parseInt(split[0]);
y = Integer.parseInt(split[1]);
return new RatNum(x, y);
} else if (split.length == 1) {
x = Integer.parseInt(s);
return new RatNum(x);
} else {
throw new NumberFormatException("Error");
}
}
答案 0 :(得分:1)
这是因为正则表达式解析器修剪了空条目:
"3/5/".split("/").length
将返回2.
您可以通过确保它不以“/”开头或结尾来避免空条目:
while (s.startsWith("/"))
s = s.substring(1);
while (s.endsWith("/"))
s = s.substring(0, s.length()-1);
如果有空条目,则抛出错误:
if (s.startsWith("/") || s.endsWith("/"))
throw new SomeError();