Java 替换html中的值
所以我使用jsoup解析一个网站,然后在文本视图中显示html 它有一些断开的链接,所以我必须进去更换它们。以下是我的一些代码:Java 替换html中的值,java,android,jsoup,Java,Android,Jsoup,所以我使用jsoup解析一个网站,然后在文本视图中显示html 它有一些断开的链接,所以我必须进去更换它们。以下是我的一些代码: new Thread(new Runnable() { public void run() { try { Elements links = doc.select("a"); for (Eleme
new Thread(new Runnable() {
public void run() {
try {
Elements links = doc.select("a");
for (Element i: links){
String relHref = i.attr("abs:href");
if (!relHref.startsWith("http://") && !relHref.startsWith("https://")){
html = html.replace(relHref, "http://www.bths.edu"+ relHref);
}
}
runOnUiThread(new Runnable() {
public void run() {
article.setText(Html.fromHtml(set));
article.setMovementMethod(LinkMovementMethod.getInstance());
}
});
不幸的是,我一直遇到这样的错误:
java.lang.OutOfMemoryError
at java.lang.AbstractStringBuilder.<init>(AbstractStringBuilder.java:82)
at java.lang.StringBuilder.<init>(StringBuilder.java:67)
at java.lang.String.replace(String.java:1374)
at com.tod.android.bths.ArticleViewer$2.run(ArticleViewer.java:78)
at java.lang.Thread.run(Thread.java:856)
我在进行此切换时没有收到错误
String relHref = i.attr("href");
但这不是我需要的。。。为什么abs:href会给我带来问题
@哈拉尔德
//So I've done this and now, I don't get an error. But nothing gets replaced. Why?
if (!relHref.startsWith("http://") && !relHref.startsWith("https://")&& relHref!="" ){
html = html.replace(relHref, "http://www.bths.edu"+ relHref);
}
检查relHref是否为空字符串,因为如果为空,html中的每个空字符串都将替换为非空字符串。它们有很多。增加jvm堆并尝试探查器查看使用率高的地方。错误发生在哪里?你能发布堆栈跟踪吗?abs:使用org.jsoup.nodes.Node.absUrlString。那里是否发生OutOfMemoryException?不要将字符串与!=进行比较。在这里,您应该使用relHref.length>0。@Harald我切换了它,但仍然没有任何内容被替换:您是否偶尔检查relHref是否是一个确实出现在html中的字符串?
//So I've done this and now, I don't get an error. But nothing gets replaced. Why?
if (!relHref.startsWith("http://") && !relHref.startsWith("https://")&& relHref!="" ){
html = html.replace(relHref, "http://www.bths.edu"+ relHref);
}