我在我的项目中使用Jsoup,我试图了解HTMLparser.java中的这些代码行是一步一步的:
static List<LinkNode> toLinkNodeObject(LinkNode parentLink, Elements tagElements, String tag) {
List<LinkNode> links = new LinkedList<>();
for (Element element : tagElements) {
if(isFragmentRef(element)){
continue;
}
String absoluteRef = String.format("abs:%s", tag.contains("[") ? tag.substring(tag.indexOf("[") + 1, tag.length()) : "href");
String url = element.attr(absoluteRef);
if(url!=null && url.trim().length()>0) {
LinkNode link = new LinkNode(url);
link.setTag(element.tagName());
link.setParentLink(parentLink);
links.add(link);
}
}
return links;
}
你能告诉我这行中的“abs:%s”正则表达式是做什么的吗?
String absoluteRef = String.format("abs:%s", tag.contains("[") ? tag.substring(tag.indexOf("[") + 1, tag.length()) : "href");
答案 0 :(得分:2)
假设标签具有以下值:
tag = "blah, blah, [medo0070";
然后是有问题的行
String absoluteRef = String.format("abs:%s", tag.contains("[") ? tag.substring(tag.indexOf("[") + 1, tag.length()) : "href")
将分配
abs:medo0070
到absoluteRef,因为标签变量包含&#39; [&#39;字符。如果tag有值
tag = "blah, blah, medo0070";
然后absoluteRef将被赋予值
abs:href
因为标签变量不包含&#39; [&#39;字符。
三元运算符(见这里:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op2.html)的工作原理如下:
a ? b : c;
相当于
if (a) {
b;
}
else {
c;
}
在您的示例中,a是 tag.contains(&#34; [&#34;),b是 tag.substring(tag.indexOf(&#34; [& #34;)+ 1,tag.length())和c是&#34; href&#34; 。