Java 将解析文本添加到字符串中

Java 将解析文本添加到字符串中,java,parsing,jsoup,Java,Parsing,Jsoup,我在做我的第一个项目,其中包括一个网站解析器。我试图学习一点关于解析器的知识,无意中发现了一个名为“Jsoup”的库,它位于以下位置: 然后,我尝试了在教程网站上找到的以下代码示例: import java.io.IOException; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; publ

我在做我的第一个项目,其中包括一个网站解析器。我试图学习一点关于解析器的知识,无意中发现了一个名为“Jsoup”的库,它位于以下位置:

然后,我尝试了在教程网站上找到的以下代码示例:

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class HTMLParserExample1 {

  public static void main(String[] args) {

    Document doc;
    try {

        // need http protocol
        doc = Jsoup.connect("http://google.com").get();

        // get page title
        String title = doc.title();
        System.out.println("title : " + title);

        // get all links
        Elements links = doc.select("a[href]");
        for (Element link : links) {

            // get the value from href attribute
            System.out.println("\nlink : " + link.attr("href"));
            System.out.println("text : " + link.text());

        }

    } catch (IOException e) {
        e.printStackTrace();
    }

  }

}
代码运行良好,因此我决定尝试将其与我的应用程序的其余部分结合起来(这是一个JFrame,其中包含一个文本框)

所以我试图做的是将放入[code]System.out.println()中的内容;字符串中的[code]。 在执行此操作时,我尝试以下方法时出错:

s + "\nlink : " + link.attr("href");
s + "text : " + link.text();
我遇到了一些错误,很快意识到这不是正确的方法,所以我找到了String.concat方法并决定使用它。 使用此命令后,它仍然不起作用,然后我也意识到,应该解析的内容也不再使用System.out命令打印出来

这是我目前的代码:

import java.io.IOException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;


public class JParser {

    private String finishedParse;

     public static void JParser() {

         //String that should hold the finished parse
         String finishedParse = new String();

         //test string used to see if what the Netbeans IDE recomended me to do work
         String tester = new String();
         finishedParse = "";

    Document doc;
    try {

        //Need http protocol
        doc = Jsoup.connect("http://google.com").get();

        //Get page title
        String title = doc.title();
        System.out.println("title : " + title);

        //Get all links
        Elements links = doc.select("a[href]");
        for (Element link : links) {

            //Get the value from href attribute
            System.out.println("\nlink : " + link.attr("href"));
            System.out.println("text : " + link.text());
                        tester = finishedParse.concat("\nlink : " + link.attr("href"));
                        tester = finishedParse.concat("text : " + link.text());
                        tester = finishedParse.concat("\n");

        }

    } catch (IOException e) {
        e.printStackTrace();
                System.out.println(e);
    }
  }

     //The method i wish to call from my other class to get the parsed text returned.
     public String getParsedText(String parsedText){
         parsedText = finishedParse;
         return parsedText;
     }
}
现在的问题是,System.out命令应该打印的内容没有打印出来,我仍然没有弄清楚如何将解析后的文本输入到字符串中

我真的对学习很感兴趣,我很难找到代码中的错误。我确实在网上搜索过answears,但没有成功

剩下的错误如下所示 这两个System.out语句没有向控制台输出任何内容,当我从教程中复制代码时,它确实起了作用。这两个代码都在上面的帖子里,请阅读并帮助我

问题是我用一种奇怪的方式给全班打电话,我最好的猜测是我昨天累了,所以我的无知开始了。

试试这个:

for (Element link : links) {

  // Get the value from href attribute
  System.out.println("\nlink : " + link.attr("href"));
  System.out.println("text : " + link.text());
  finishedParse = finishedParse.concat("\nlink : " + link.attr("href"));
  finishedParse = finishedParse.concat("text : " + link.text());
  finishedParse = finishedParse.concat("\n");

}
请注意,使用
concat()
与使用
+
运算符完全相同,真正的问题是您应该更新用于连接最终答案的字符串。更好的是,您应该使用
StringBuilder
进行此类作业-它将进行适当的更新(而
concat()
每次都返回一个新字符串),因此效率更高

StringBuilder sb = new StringBuilder();

for (Element link : links) {

  // Get the value from href attribute
  System.out.println("\nlink : " + link.attr("href"));
  System.out.println("text : " + link.text());
  sb.append("\nlink : " + link.attr("href"));
  sb.append("text : " + link.text());
  sb.append("\n");

}

String finishedParse = sb.toString();
试试这个:

for (Element link : links) {

  // Get the value from href attribute
  System.out.println("\nlink : " + link.attr("href"));
  System.out.println("text : " + link.text());
  finishedParse = finishedParse.concat("\nlink : " + link.attr("href"));
  finishedParse = finishedParse.concat("text : " + link.text());
  finishedParse = finishedParse.concat("\n");

}
请注意,使用
concat()
与使用
+
运算符完全相同,真正的问题是您应该更新用于连接最终答案的字符串。更好的是,您应该使用
StringBuilder
进行此类作业-它将进行适当的更新(而
concat()
每次都返回一个新字符串),因此效率更高

StringBuilder sb = new StringBuilder();

for (Element link : links) {

  // Get the value from href attribute
  System.out.println("\nlink : " + link.attr("href"));
  System.out.println("text : " + link.text());
  sb.append("\nlink : " + link.attr("href"));
  sb.append("text : " + link.text());
  sb.append("\n");

}

String finishedParse = sb.toString();

1) 你提到了错误,但没有告诉我们它们是什么。2) 只需使用+运算符进行字符串连接。我将编辑文章,并包括更值得注意的确切问题。1)您提到错误,但没有告诉我们错误是什么。2) 只需使用+运算符进行字符串连接。我将编辑文章,并包括更值得注意的确切问题。谢谢,但我仍然有一个问题,上面添加到finishedParse变量的两行代码没有在控制台中打印出来。再次感谢您花时间,甚至改进了answear,但仍然存在问题只有50%的问题,因为应该打印到控制台的内容没有打印到双语句系统中。out。。不工作。这只能是因为
doc.select(“a[href]”)
没有返回任何内容,但遗憾的是,我对
Jsoup
不够熟悉,不知道为什么在复制教程代码时会出现奇怪的情况,因为它工作得很好。。这就是为什么我很困惑的原因。谢谢,但我仍然有一个问题,上面添加到finishedParse变量的两行没有在控制台中打印出来。再次感谢您花时间,甚至改进了您的答案,但这仍然只是问题的50%,因为应该打印到控制台的内容没有打印出来这两个语句系统。输出。。不工作。这只能是因为
doc.select(“a[href]”)
没有返回任何内容,但遗憾的是,我对
Jsoup
不够熟悉,不知道为什么在复制教程代码时会出现奇怪的情况,因为它工作得很好。。这就是为什么我很困惑。