我非常一个Java初学者。 对于我的课,我们必须打印出所有将被从用户输入的HTML源代码解析的链接。
基本上,我想弄清楚如何采取href属性之后在链接的字符串,并做了网页上所有链接,而无需使用外部方法(即使用数组,字符串和字符串的方法,但不引入其他库)。
我非常一个Java初学者。 对于我的课,我们必须打印出所有将被从用户输入的HTML源代码解析的链接。
基本上,我想弄清楚如何采取href属性之后在链接的字符串,并做了网页上所有链接,而无需使用外部方法(即使用数组,字符串和字符串的方法,但不引入其他库)。
不要用分析器或正则表达式做到这一点。 尝试杰里 。 赞(未测试):
Jerry doc = jerry(html);
doc.$("a").each(new JerryFunction() {
public boolean onNode(Jerry $this, int index) {
String href = $this.attr("href");
System.out.println(href);
}
}
或任何HTML友好的查询语言。 由于非外部组件的要求尽量尝试使用Java在HTML目录链接列表解析
我不知道你是什么类,因此正则表达式的解决方案可能对你太先进。
这可能是这样,如果你是例如第一年,但我真的不能告诉。
你可以做它用串或阵列,但是这是waaaay太多编码。 这就是为什么标准的Java正则表达式存在:
String A_TAG_MATCHING_GROUP = "<a>([^<>]*)</a>";
Matcher matcher = Pattern.compile(A_TAG_MATCHING_GROUP).matcher("<html>\n<head>d\nadas</head><body><a>LINK_DESC_ONE</a>dsdasd<a>LINK_DESC_2</a></body></html>");
String url, linkDescription;
while (matcher.find()) {
System.out.println(matcher.group(1));
}
编译并运行此代码,请继续阅读!
最关键的部分是A_TAG_MATCHING_GROUP正则表达式。 因为它是现在,它会匹配一个确切的字符串“<A>”依次为:
所以,如果你写的A_TAG_MATCHING_GROUP正则表达式良好,
matcher.group(i);
你会得到的URL。 既然是你的类,我不会写吧:)修改匹配参数,并打一点(更改硬编码的HTML字符串)。 一些真正的HTML的和比较实际工具的输出这样的输出一个 。
当然,你必须阅读给定的教程( 此之前可能也有用),这里是相关的API链接:
但是,如果你想使用“数组和字符串”,您可以使用以下algorithmn:
阅读每个字符例如HTML字符
字符串HTML; 为(字符c:s.toCharArray()){//
}
当你到了“<”(一个布尔变量first_char_of_a_tag_found如)remeber它
决定将你immediatley希望它后面加“一” char或你会允许换行和空格。 当你发现“了”布尔变量remeber它。
当你到达的 “href =”“开始remebering内容 - 可能会使用[字符串()](http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#substring( INT,INT))有关于HTML字符串,并存储在其返回值的StringBuilder称为url变量。
这是一个非常低级的算法,但它会做的工作。 它需要大量的编码,这是一个整体的 , 程序性的办法。
基本上,loosley说你将实施一个正则表达式“引擎” - 我在文章的第一部分描述的。
我编程,他们既作为任务(第一个参加面试的Java和第二次是在C作为一种入学考试为Java COLLEGIUM),但尽管平时的学习方法学(第二个第一),我会建议第一个第一 - 但它取决于你在紧张的日程,什么是您当前的知识。
希望能帮助到你 :)
编辑:
你不能用正则表达式解析HTML,但你可以 从他们的标签解析出的URL。 为了不被混淆,虽然,我会用definetly杰里去安东建议。
你可以看到,像杰里解决方案是从单纯的观察来处理它需要他的大小和矿柱和时间,对于初学者在现实生活中WAAY更好:))
你可能要考虑其中的一些想法