方法getHtmlFromUrl有时会导致Exception。但是,有时它会输出一个字符串。我将如何尽可能少地调用一次函数gainWorkingHtml,以便尽快从中获取字符串?
到目前为止,我已经尝试了基本的try / catch递归。我听说过有关尝试使用do {语句的信息,但不知道从那里去哪里。
public static String obtainWorkingHtml() throws Exception {
try {
String randomUrl = "https://www." + randomWord() + ".com";
return getHtmlFromUrl(randomUrl);
} catch(Exception e) {
return obtainWorkingHtml();
}
}
照原样,程序始终会产生一个字符串。有时会花费很长时间,但总是如此。理想情况下,它将花费更少。
编辑:我实质上是在尝试从可能存在或不存在的网站获取HTML数据。这可能会导致各种错误,因此,如果重要的话,我还没有定义预期的异常。
答案 0 :(得分:0)
如果递归级别是无限/不确定的,则递归是一个坏主意。递归深度受堆栈大小的限制,在某些时候,您会收到一个StackOverflowError。为了达到相同的效果,但没有堆栈溢出的可能性,请清空catch
块并将try/catch
包裹在while(true)
块中。
答案 1 :(得分:0)
我的方法如下:
public static String obtainWorkingHtml()
{
String retValue = null;
while( retValue == null )
{
final var randomUrl = "https://www." + randomWord() + ".com";
try
{
retValue = getHtmlFromUrl( randomUrl );
}
catch( Exception e ) { /* Deliberately ignored */ }
}
return retValue;
}
如果getHtmlFromUrl()
永远不会返回一些有用的响应,它将仍然永远运行,但是至少它不会破坏堆栈。