0

我目前正在用 Java 编写一个简单的程序来回答一个问题。问题说:

您正在修复文档(表示为字符串)未能转换为正确的 xml 的错误。出现此问题的原因可能是:
A. 某些字符在 xml 中失败,或者
B. 传入的文档长度 > 100 个字符(它们是小文档)

然后列出 5 个需要转义的字符(例如,用转义序列替换“>”;)。

我已经编写了用转义符替换特殊字符的部分,但我不确定如何处理长度。

if (length of string > 100) {
    do what?
}

我在考虑可能实现一个 try catch 语句,但这用于运行时异常,对吗?(空指针等)。从设计的角度来看,在完成功能工作的同时避免此错误的最佳方法是什么?

4

4 回答 4

3

您在这里没有处理异常,而是应该抛出一个异常:

private static final int MAX_LENGTH = 100;
// ...

if (inputString.length() > MAX_LENGTH) {
  throw new IllegalArgumentException(
      String.format("String is too large. Found %d characters, maximum is %d.",
          inputString.length(), MAX_LENGTH));
}

这是您通知用户您的方法违反 API 的典型方式。确保您的方法文档指定字符串不能超过 100 个字符。

于 2013-04-25T10:55:15.780 回答
1

发生异常时应该发生异常。你永远不应该使用异常来控制你的业务逻辑(特别是如果它是像 NoEntityFound 这样的第三方异常,如果抛出的第三方异常的规​​则发生变化怎么办?)。

如果长度确实是您需要停下来告诉用户的东西,请抛出自定义异常,例如...

throw new IllegalStringLength("String length invalid");

但是,如果这是您可以在不引发异常并更优雅地处理的情况下做的事情,我通常会说这样做会更好。这不像空指针或数据库无法连接。

然后,您必须捕获上述异常并将其输出给用户(同样,使用异常来控制您的应用程序流)。

于 2013-04-25T10:58:10.790 回答
1

如果我理解正确,您的函数会将长度小于 100 的字符串转换为 XML。因此,从设计的角度来看,当给定的字符串长度 >= 100 时,我认为抛出 IllegalArgumentException 没有问题。

您不应该尝试继续执行,异常停止函数执行是有原因的 - 以保证符合函数合同的正确结果。

于 2013-04-25T10:58:29.653 回答
0

创建您自己的异常类:

public class FileTooLongForXmlException extends Exception{
    public FileTooLongForXmlException() {
        super("Your file is > 100 carac");
    }
}

然后你就这样做:

if (length of string > 100) {
    throw new FileTooLongForXmlException();
}
于 2013-04-25T10:58:06.073 回答