2016-08-12 4 views
3

Meine Frage ist, wie kann ich feststellen, ob das HTML irgendetwas in der Zeichenfolge enthält, funktioniert das unten nicht. es wirft, inkompatible Typen: java.lang.String []Java, um zu sehen, ob ein String mehrere Wörter enthält?

public void run() { 
     Document doc; 
     String[] matches = new String[]{"Unavailable", "Too Short", "skin-3d"}; 
     try { 
      BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt", true)); 
      //Thread.sleep(3000); 
      doc = Jsoup.connect("https://t.com/s/" + line).userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") 
        .referrer("http://www.google.com").ignoreHttpErrors(true).get(); 
      //Elements ID = doc.getElementsByClass("card-header"); 
      String html = doc.html(); 
      if (!html.contains(matches)) { 
       System.out.println(line + " taken"); 
       System.out.println(line + " is available or is only two chars"); 
       writer.write(line + "\n"); 
       writer.close(); 

      } else { 
       System.out.println(line + " taken"); 
       writer.close(); 
      } 
     } catch (IOException e1) { 
      e1.printStackTrace(); 
     } 

    } 
} 
+0

nur klar zu sein, Sie wollen prüfen, ob html alle String im Array übereinstimmt oder zumindest eine enthält? –

+0

Ja richtig, aber so etwas wie die Antwort von GhostCat ist das Spammen der Webseite 3 mal was mal raus – nooby

+0

was ist richtig? alles oder nur ein Spiel? –

Antwort

0
if(html.contains(Bad[0]) || html.contains(Bad[1]) || html.contains(Bad[2])){ 
+0

Was ist, wenn Ihr Array 100 Elemente enthält? Du wirst nicht hundertmal html.contains schreiben ... – L01c

2

Das Verfahren enthält nur eine Argument annimmt; was muss eine einzige CharSequence.

Sie versuchen, ein Array der Zeichenfolgen stattdessen zu übergeben.

So eine einfache Lösung wäre, dass zu ändern: anyMatch

boolean anyMatch = false; 
for (String match : matches) { 
    if (html.contains(match)) { 
    anyMatch = true; 

und später überprüfen.

Für den Rekord: das ist wirklich einfach. Und der Compiler sagte Ihnen genau was das Problem mit Ihrem Code ist. Wenn Sie eine Compiler-Nachricht erhalten ... dann lesen Sie es. Lesen Sie das Javadoc für die Bibliotheksmethoden, die Sie aufrufen. Suchen Sie im Internet nach Teilen Ihrer Fehlermeldung. So löst man solche Probleme!

+0

Dies hat nicht funktioniert für mich, Ich bekomme jetzt keine Verbindung mehr, da ich dreimal verbunden bin. – nooby

+0

Natürlich müssen Sie diese Änderung an Ort und Stelle vornehmen. Und im Ernst: Wenn solche einfachen Dinge dir so viele Probleme bereiten: ziehe es in Betracht, zurückzutreten und ein paar Grundlagen zu lernen, richtig ** jetzt **. Spielen Sie nicht mit http-Verbindungen, Dateilesegeräten und ähnlichen Dingen herum, wenn Sie meinen Beispielcode nicht nehmen und an die richtige Stelle in Ihrem Quellcode stellen können. Mit anderen Worten: Es ist Ihr Code, Sie müssen sicherstellen, dass Sie connect() und html() nur einmal aufrufen! – GhostCat

1

Von der Java API

booleanenthält (CharSequence s)

Gibt true zurück, wenn und nur wenn diese Zeichenfolge die angegebene Reihenfolge der char-Werte enthält.

Sie können der contains-Methode kein Array mit einem String zuweisen. Ich schlage vor, Sie eine for-Schleife zu tun, um Ihr Problem zu lösen:

boolean match = false; 
for (String s : matches){ 
    if (html.contains(s)){ 
     match = true; 
     break; 
    } 
} 
+0

Ihre Antwort ist die gleiche wie bei GhostCat. Wenn Sie nichts neues haben, brauchen Sie keine doppelte Antwort. Sie können nur die Antwort abstimmen, die Sie für diese Frage für richtig halten. Danke –

+0

Zunächst schrieb ich meine Antwort zur gleichen Zeit. Zweitens denke ich, dass der Verweis auf die Java-API wirklich wichtig ist. Es zeigt den Leuten, dass die Forschung im Voraus gestellt werden kann, indem man eine Frage stellt, und es ist oft der beste Weg, Antworten zu finden. Schließlich scheint meine Lösung ein bisschen schneller zu sein, da sie die Schleife stoppt, sobald ein Element gefunden wurde. – L01c

+0

Wenn Sie nur für den Stopp-Loop die Frage erneut beantwortet haben, dann war es besser, die erste Antwort zu bearbeiten oder einen Kommentar zu hinterlassen, trotzdem gibt es nichts Neues in Ihrer Antwort, nur Kopieren und Einfügen. –

Verwandte Themen