将递归修改为循环 已经搞定了,使用一个stack实现 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 请优化,下列代码供参考:private void parseField(JsoupParser parser, String target) throws Exception { if (StringUtils.isEmpty(target)) { return; } List<Field> fields = processor.getPageRule(target).getFields(); Stack<List<Field>> fieldStack = new Stack<List<Field>>(); Stack<String> targetStack = new Stack<String>(); Stack<List<String>> valueStack = new Stack<List<String>>(); Stack<JsoupParser> parserStack = new Stack<JsoupParser>(); fieldStack.push(fields); parserStack.push(parser); while (!fieldStack.isEmpty()) { fields = fieldStack.pop(); for (Field field : fields) { List<String> values = getValues(parser, field.getFieldValue()); System.out.println(field.getFieldName() + "\t" + values); if (StringUtils.isNotEmpty(field.getTarget())) { valueStack.push(values); targetStack.push(target); target = field.getTarget(); } } while (!valueStack.isEmpty()) { List<String> values = valueStack.pop(); for (String url : values) { parser = new JsoupParser(url, userAgent); fields = processor.getPageRule(target).getFields(); parserStack.push(parser); fieldStack.push(fields); } } parser = parserStack.pop(); }} JavaSE怎么实现浏览按钮, java如何填充任意图形,用斜线。 关于mouselistener,请进来看下这段代码。。 问个正则问题 hashMap 问题 反射问题 MVC有那些模式? 问一个类路径的问题,请教高手! 读取.CSV文件 急求,读取数据库的中文问题????? JAVA导Excel到Mysql传参中文乱码 抛出异常有什么用?
请优化,下列代码供参考:private void parseField(JsoupParser parser, String target) throws Exception {
if (StringUtils.isEmpty(target)) {
return;
}
List<Field> fields = processor.getPageRule(target).getFields();
Stack<List<Field>> fieldStack = new Stack<List<Field>>();
Stack<String> targetStack = new Stack<String>();
Stack<List<String>> valueStack = new Stack<List<String>>();
Stack<JsoupParser> parserStack = new Stack<JsoupParser>();
fieldStack.push(fields);
parserStack.push(parser);
while (!fieldStack.isEmpty()) {
fields = fieldStack.pop();
for (Field field : fields) {
List<String> values = getValues(parser, field.getFieldValue());
System.out.println(field.getFieldName() + "\t" + values);
if (StringUtils.isNotEmpty(field.getTarget())) {
valueStack.push(values);
targetStack.push(target);
target = field.getTarget();
}
}
while (!valueStack.isEmpty()) {
List<String> values = valueStack.pop();
for (String url : values) {
parser = new JsoupParser(url, userAgent);
fields = processor.getPageRule(target).getFields();
parserStack.push(parser);
fieldStack.push(fields);
}
}
parser = parserStack.pop();
}
}