前几天我提出了一个问题here ,但最后我决定自己做,因为时间问题,现在我有更多的时间来解决它:D我喜欢jSoup,但我有点老派,并且更喜欢自己做(感谢@Bakkal无论如何)。
我设法编写了这段代码,目前它工作正常,但是如果网页构造得不好,它会破坏代码,例如,如果它不以 http 开头,则代码将找不到它,并且如果网址不是以我放入的内容之一结尾,那么它将返回一个非常难看的地址..例如
http://www.google.com/ hey dude how are you? great, eating at jack's
我的结果是:
http://www.google.com/ hey dude how are you? great, eating at jack
我愿意接受任何建议,我将继续提出我的问题,然后发布代码
- 如果我没有确切的结尾,代码就会中断
- 如果我将空格“”作为分隔符,我将丢失地址中包含空格的所有页面
- 我想捕获所有地址,而不仅仅是以 http 开头的地址,例如 www.google.com 是有效地址,contacts.google.com 也是有效地址
谢谢你所做的一切:D
File txtUrlSpecialFile = new File("pepe.txt");
FileWriter txtUrlSpecial;
txtUrlSpecial = new FileWriter(txtUrlSpecialFile);
txtUrlSpecial.write(profundidad-1);
for(int j=0;j<bigString.length()-5;j++){ //I put 5 but I can put more
if(bigString.substring(j, j+4).equals("http")){
while(bigString.charAt(j)!='"' && bigString.charAt(j)!='<'&& bigString.substring(j, j)!="'"){
txtUrlSpecial.write(bigString.charAt(j));
j++;
}
txtUrlSpecial.write(SingletonFunction.getNewLine());
}
}
txtUrlSpecial.close();
最佳答案
如果我理解正确的话,您正在尝试从 HTML 文件中从属性(例如“href”)和文本中试探性地提取 URL。
- 您希望它能够处理格式错误的 HTML
- 您希望它能够处理格式错误的网址;例如包含空格的网址
- 你不希望它犯任何错误;例如你的例子。
我告诉你,你的要求是不可能的。例如,应该从以下文本中提取什么内容:
Go to the URL http://example.com/ this and that. And if that doesn't work,
I recommend that you go read the http specification.
“这个和那个”是否应该是 URL 的一部分?你的软件应该如何解决这个问题?如果文档作者的意思与你的启发式所说的相反怎么办?那么“http 规范”呢……这显然不是 URL。
这是另一个稍微微妙的例子:
First, go to the URL http://example.com/index.html.
Then click on the "login" link.
您的软件是否应该提取“http://example.com/index.html .”或“http://example.com/index.html”?根据 URL 规范,两者都是有效的 URL。你的软件可能会去掉最后的“.”。因为它很可能是标点符号,但它可能是错误的。
我的建议:
- 不要认为您可以比现有的宽松 HTML 解析器做得更好。无论你来自哪里,你能做到这一点的机会几乎为零。
- 不要认为您的软件不会出错。 100% 的准确性要求您的软件能够读取文件创建者的想法。 (可以说,即使这样还不够。)
- 注意网址出现的上下文。您需要使用不同的启发式方法从 HTML 属性和文本中提取 URL。
- 准确注意什么是合法网址,什么不是合法网址。
- 完整阅读并理解 HTML 和 URL/URI 规范的所有相关部分。虽然在格式错误的文档中犯错误是可以接受的,但无法从格式正确的 HTML 文档的属性中提取格式正确的 URL 是不可原谅的。
关于java - 如何优化这段丑陋的代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3379786/