J'expérimente JSoup et je n'arrive pas à faire fonctionner ma 2ème remise de gaz avec mon scanner. Il passe directement à ma déclaration catch.Fermeture du programme Java avant que le scanner ne prenne l'entrée 2ieme fois
Voici une description du programme:
Je prends un terme de recherche google comme entrée utilisateur (String). Ensuite, je demande le nombre d'éléments de requête que l'utilisateur souhaite voir, et entrez un nombre entier.
Je parcourt chaque élément renvoyé et l'ajoute à une ArrayList. La chaîne affichée sur la console comprend un index, un texte de lien et un lien hypertexte.
Ensuite, je veux demander à l'utilisateur quel index ils aimeraient entrer pour ouvrir une fenêtre de navigateur menant à ce lien. Ceci est fait en cocantenant la chaîne hRef avec la commande de terminal Linux "xdg-open" en utilisant la classe Runtime.
Cela fonctionne très bien jusqu'à ce qu'il est temps de demander quel index sera choisi.
Voici mon 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;
}
}
EST ICI LA SORTIE Remarquez comment il arrête après j'entre « 1 » Non, je n'ai pas pris en charge en appuyant sur « 0 » encore:
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
Voir aussi [Lorsque Runtime.exec() ne sera pas] (http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html) pour de nombreux bons conseils sur la création et la gestion d'un processus correctement. Puis ignorez qu'il se réfère à 'exec' et utilisez un' ProcessBuilder' pour créer le processus. –