我在文本中有几个锚标签,
输入: <a href="http://stackoverflow.com" >Take me to StackOverflow</a>
输出:
http://stackoverflow.com
如何在不使用第三方API的情况下找到所有这些输入字符串并将其转换为java中的输出字符串?
核心API中有一些类可用于href从锚标记中获取所有属性(如果存在!):
import java.io.*;
import java.util.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
public class HtmlParseDemo {
public static void main(String [] args) throws Exception {
String html =
"<a href=\"http://stackoverflow.com\" >Take me to StackOverflow</a> " +
"<!-- " +
"<a href=\"http://ignoreme.com\" >...</a> " +
"--> " +
"<a href=\"http://www.google.com\" >Take me to Google</a> " +
"<a>NOOOoooo!</a> ";
Reader reader = new StringReader(html);
HTMLEditorKit.Parser parser = new ParserDelegator();
final List<String> links = new ArrayList<String>();
parser.parse(reader, new HTMLEditorKit.ParserCallback(){
public void handleStartTag(HTML.Tag t, MutableAttributeSet a, int pos) {
if(t == HTML.Tag.A) {
Object link = a.getAttribute(HTML.Attribute.HREF);
if(link != null) {
links.add(String.valueOf(link));
}
}
}
}, true);
reader.close();
System.out.println(links);
}
}
Run Code Online (Sandbox Code Playgroud)
将打印:
[http://stackoverflow.com, http://www.google.com]
您可以使用JSoup
String html = "<p>An <a href=\"http://stackoverflow.com\" >Take me to StackOverflow</a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();
String linkHref = link.attr("href"); // "http://stackoverflow.com"
Run Code Online (Sandbox Code Playgroud)
另请参阅
public static void main(String[] args) {
String test = "qazwsx<a href=\"http://stackoverflow.com\">Take me to StackOverflow</a>fdgfdhgfd"
+ "<a href=\"http://stackoverflow2.com\">Take me to StackOverflow2</a>dcgdf";
String regex = "<a href=(\"[^\"]*\")[^<]*</a>";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(test);
System.out.println(m.replaceAll("$1"));
}
Run Code Online (Sandbox Code Playgroud)
注意:所有 Andrzej Doyle 的观点都是有效的,如果您的输入比简单的多<a href="X">Y</a>,并且您确定这是可解析的 HTML,那么您最好使用 HTML 解析器。
总结一下:
<a>。(您可以将其视为特殊情况) <a>。(同样,您可以将其视为特殊情况)但是,如果您的请求始终替换<a href="X">Y</a>为"X"而不考虑上下文,那么我发布的代码将起作用。
| 归档时间: |
|
| 查看次数: |
12149 次 |
| 最近记录: |