nehmen Ich experimentiere mit JSoup, und ich kann nicht mein 2. Durchstarten mit meinem Scanner zu arbeiten. Es springt direkt zu meiner Catch-Anweisung.Java-Programm geschlossen, bevor Scanner kann das zweite Mal um
Hier ist eine Beschreibung des Programms:
Ich nehme eine Google-Suche Begriff als Benutzereingabe (String). Als nächstes frage ich nach der Anzahl von Abfrageelementen, die der Benutzer sehen möchte, und gebe eine Ganzzahl ein.
Ich Schleife durch jedes Element, das zurückgegeben wird, und fügen Sie es zu einer ArrayList hinzu. Die Zeichenfolge, die auf der Konsole angezeigt wird, besteht aus einem Index, einem Linktext und einem Hyperlink.
Ich möchte dann den Benutzer fragen, welchen Index sie eingeben möchten, um ein Browserfenster zu öffnen, das zu diesem Link führt. Dies geschieht, indem die hRef-Zeichenfolge mit dem Linux-Terminal-Befehl "xdg-open" unter Verwendung der Runtime-Klasse cokantiert wird.
Es funktioniert gut, bis es Zeit ist zu fragen, welcher Index gewählt wird.
Hier ist mein Code:
/**
* Created by christopher on 4/26/16.
*/
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
public class GoogleSearchJava {
static int index;
static String linkHref;
static Scanner input;
public static final String GOOGLE_SEARCH_URL = "https://www.google.com/search";
public static void main(String[] args) throws IOException {
//GET INPUT FOR SEARCH TERM
input = new Scanner(System.in);
System.out.print("Search: ");
String searchTerm = input.nextLine();
System.out.print("Enter number of query results: ");
int num = input.nextInt();
String searchURL = GOOGLE_SEARCH_URL + "?q=" + searchTerm + "&num=" + num;
//NEED TO DEFINE USER AGENT TO PREVENT 403 ERROR.
Document document = Jsoup.connect(searchURL).userAgent("Mozilla/5.0").get();
//OPTION TO DISPLAY HTML FILE IN BROWSWER. DON'T KNOW YET.
//System.out.println(doc.html());
//If google search results HTML change the <h3 class="r" to <h3 class ="r1"
//need to change below stuff accordingly
Elements results = document.select("h3.r > a");
index = 0;
String news = "News";
ArrayList<String> displayResults = new ArrayList<>();
for (Element result : results) {
index++;
linkHref = result.attr("href");
String linkText = result.text();
String pingResult = index + ": " + linkText + ", URL:: " + linkHref.substring(6, linkHref.indexOf("&")) + "\n";
if (pingResult.contains(news)) {
System.out.println("FOUND " + "\"" + linkText + "\"" + "NO HYPERTEXT FOR NEWS QUERY RESULTS AT THIS TIME. SKIPPED INDEX.");
System.out.println();
} else {
displayResults.add(pingResult);
}
}
for(String urlString : displayResults) {
System.out.println(urlString);
}
System.out.println();
goToURL(input, displayResults);
}
public static int goToURL(Scanner input, ArrayList<String> resultList) {
int newIndex = 0;
try {
System.out.print("Enter Index (i.e. 1, 2, etc) you wish to visit, 0 to exit: ");
newIndex = input.nextInt();
input.nextLine();
for (String string : resultList) {
if(string.startsWith(String.valueOf(newIndex))) {
Process process = Runtime.getRuntime().exec("xdg-open " + string.substring(6, string.indexOf("&")));
process.waitFor();
}
}
} catch (Exception e) {
System.out.println("ERROR while parsing URL");
}
return newIndex;
}
}
HIER IST DER Hinweis OUTPUT wie es stoppt, nachdem ich "1" eingeben Nein, ich habe noch nicht gekümmert "0" drücken:
Search: Oracle
Enter number of query results: 3
1: Oracle | Integrated Cloud Applications and Platform Services, URL:: =http://www.oracle.com/
2: Oracle Corporation - Wikipedia, the free encyclopedia, URL:: =https://en.wikipedia.org/wiki/Oracle_Corporation
3: Oracle on the Forbes America's Best Employers List, URL:: =http://www.forbes.com/companies/oracle/
Enter Index (i.e. 1, 2, etc) you wish to visit, 0 to exit: 1
ERROR while parsing URL
Process finished with exit code 0
Siehe auch [Wenn Runtime.exec() nicht] auszuführen, (http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html) für viele gute Tipps zum korrekten Erstellen und Bearbeiten eines Prozesses. Dann ignoriere es auf 'exec' und verwende einen' ProcessBuilder' um den Prozess zu erstellen. –