Java-捕获格式错误的分数的异常
长话短说,一个更大程序的上述代码部分应该能够在用户输入错误分数(如1/2/3)时捕获异常。现在,我遇到的问题是,我的程序没有捕获以下1/2/。关于代码的这一部分如何能够捕获这种格式错误的分数,有什么建议吗?提前感谢。根据单参数方法的Javadoc: 该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串 重点矿山 如果希望将其包括在内,可以使用。将fraction.split/替换为fraction.split/,3,则您的行为符合预期。根据此重载的Javadoc: 如果限制n大于零,则图案最多应用n-1次Java-捕获格式错误的分数的异常,java,Java,长话短说,一个更大程序的上述代码部分应该能够在用户输入错误分数(如1/2/3)时捕获异常。现在,我遇到的问题是,我的程序没有捕获以下1/2/。关于代码的这一部分如何能够捕获这种格式错误的分数,有什么建议吗?提前感谢。根据单参数方法的Javadoc: 该方法的工作原理类似于使用给定表达式和零限制参数调用双参数split方法。因此,结果数组中不包括尾随的空字符串 重点矿山 如果希望将其包括在内,可以使用。将fraction.split/替换为fraction.split/,3,则您的行为符合预期。根
因为您想知道是否有第二个斜杠,所以将3作为第二个参数传递。一个分数应该只包含一个正斜杠/因此只需检查是否只有一个正斜杠,以及它的两侧是否有一个数值。如果使用String.split/方法,您就会知道应该只有两个数组元素。现在的问题是确定这些元素中的值是否确实是数字数据的字符串表示。您可以使用String.matches方法进行此操作 它可能看起来像这样,然而: 假设: 0/2被认为是有效的; 2/0被视为无效。 在任何情况下,都可以修改该假设:
public boolean isMalformed(String fraction) {
boolean isMalformed = false;
fraction = fraction.replace(" ", ""); //Remove any whitespaces
String[] fractionValues = fraction.split("/");
// It is assumed that: 0/2 is considered valid
// but: 2/0 is considered Invalid.
if (fractionValues.length != 2 ||
!fractionValues[0].matches("\\d+") ||
!fractionValues[1].matches("\\d+") ||
fractionValues[1].replace("0", "").equals("")) {
isMalformed = true;
}
return isMalformed;
}
您可以在String.matches方法中看到我们使用\\d+,这意味着:
当然,当您将正则表达式转义字符\放入字符串时,需要转义该转义字符,这就是为什么在代码中的正则表达式中会看到两个转义字符\\。哪个代码?我没有看到任何代码。请将代码片段放在问题本身中