2016-05-22 9 views
0

Ich schreibe eine Anwendung, die eine auf einem Server gehostete Datei betrachtet und wenn sie sich ändert, lädt sie eine Webansicht neu. Dies wird verwendet, um mehrere Webseiten auf Geräten zu replizieren.Wie kann ich zwei Zeichenfolgen, die für URLs verwendet werden, vergleichen?

stelle ich eine anfängliche URL:

private String originalURL; 
private String newURL; 

Dann die man definieren auf onCreate

originalURL = "https://www.buzzfeed.com/sallytamarkin/total-body-workouts#.moYPngWVWy"; 

ich eine Asynchron-Aufgabe auf einem Timer laufen dann verwenden:

private static String getUrlContents(String theUrl) 
{ 
    StringBuilder content = new StringBuilder(); 

    // many of these calls can throw exceptions, so i've just 
    // wrapped them all in one try/catch statement. 
    try 
    { 
     // create a url object 
     URL url = new URL(theUrl); 

     // create a urlconnection object 
     URLConnection urlConnection = url.openConnection(); 

     // wrap the urlconnection in a bufferedreader 
     BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 

     String line; 

     // read from the urlconnection via the bufferedreader 
     while ((line = bufferedReader.readLine()) != null) 
     { 
      content.append(line + "\n"); 
     } 
     bufferedReader.close(); 
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
    return content.toString(); 
} 

private class BackgroundTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... params) { 
     // perform your network logic here 
     String output = getUrlContents("http://52.30.226.234/url.txt"); 
     System.out.println("output is " + output); 
     newURL = output; 
     return "YourResult"; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // Update your screen with the results. 
    } 
} 

Wenn ich versuche, die beiden Strings zu vergleichen, werden sie immer als unterschiedlich bewertet. Ich habe versucht, match(), equals() und equalsIgnoreCase(). Dies ist der Code, den ich verwende

if ((originalURL.equals(newURL))==true) { 
       System.out.println("SAME"); 
      } else { 
       System.out.println("NOT SAME"); 
      } 
     } 

Ich habe dies auch mit zwei zuvor definierten Strings getestet und es funktioniert gut.

Ich kann nur denken, das ist wegen Sonderzeichen, aber habe versucht, einige Fixes zu entfernen, Sonderzeichen und das hat auch nicht funktioniert.

Bitte helfen!

+0

Was ist der Inhalt der URL, die Sie herunterladen? Wenn es sich nicht um eine URL handelt, sollte Ihr Variablenname aussagekräftiger sein. –

+2

Haben Sie versucht, original_URL.trim(). Equals (newURL.trim()) '? –

+2

Ich glaube, deine originalUrl hat am Ende keine '\ n' (neue Zeile). Also warum stellst du es in newUrl: 'content.append (line +" \ n ");' –

Antwort

-1

Wahrscheinlich aufgrund der Kauderwelsch Teil der URL am Ende. Dieser Teil ändert sich oft. Drucken Sie, um zu sehen, ob sie gleich sind.

1

Schreiben Sie nicht "wahr" in Ihre if-clause;

dies tun, wenn Sie Case-Sensitive wollen:

if(string1.equals(string2)){ 
    System.out.println("SAME"); 
} 
else{ 
    System.out.println("NOT SAME");    
} 

dies tun, wenn Sie Case-Insensitive wollen:

if(string1.equalsIgnoreCase(string2)){ 
    System.out.println("SAME"); 
} 
else{ 
    System.out.println("NOT SAME");    
} 

Wenn es nicht passt, was Sie wollen, oder Sie wollen einen strengeren Vergleich zu machen versuchen Sie es mit Collator