Probleme mit split von string eines quelltext

  • Antworten:3
  • Bentwortet
Nils
  • Forum-Beiträge: 8

12.12.2012, 20:41:40 via Website

Hallo,

Ich arbeite gerade mit meinem Informatikkurs in der Schule an einer Androidapp für unseren Vertretungsplan.
Dazu soll von der Webseite der Schule der Quelltext der Seite geparsed werden und dann mit Hilfe der split Methode der relevante Inhalte herausgezogen werden.

Das Laden des Quelltext erfolgt so:
1private class BackgroundTask extends AsyncTask<Void, Void, String> {
2 @Override
3 protected String doInBackground(Void... params) {
4
5 String line ="";
6 String quelltext ="";
7
8 try{
9 final String meineURL="...";
10
11
12 URL url = new URL(meineURL);
13 InputStreamReader isr = new InputStreamReader(url.openConnection().getInputStream());
14 BufferedReader br = new BufferedReader(isr);
15
16 // Kompletten Seiteninhalt auslesen
17 while((line = br.readLine()) != null){
18 quelltext = quelltext + line;
19 }
20 // reader schliessen
21 br.close();
22 isr.close();
23 }
24 catch(Exception e){
25 e.printStackTrace();
26 }
27 return quelltext;
28 }
29 }

Dies funktioniert auch optimal.
Als nächstes soll nun der Quelltext verarbeitet werden:
1String[] s1 = quelltext.split("Anmerkung</th></tr>" );
2 s1 = s1[1].split("<td class=\"list inline_header\" colspan=\"9\" >");
Wenn ich nun mein Handy über Wlan verbunden habe, funktionieren die beiden split Anweisungen. Doch falls ich mobile Daten nutze, wird beim zweiten split ein Array mit dem original String zurückgegeben. Wenn man sich den Quelltext per Log anzeigen lässt ist dieser über Wlan und mobile Daten identisch.

Hat jemand eine Idee wie man dieses Problem lösen kann?

Gruß,
Nils

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

12.12.2012, 21:31:21 via Website

Sicher, dass der 100% identisch ist?
Viele Provider haben eine on-the-fly Optimierung geschaltet, die HTML/CSS/JS Quelltexte automatisch von überflüssigen Zeichen befreit, um Bandbreite zu sparen.
Es reicht schon, dass das (tatsächlich überflüssige) Leerzeichen vor dem letzten > entsorgt wird, damit die Regex im Split nicht mehr greift.

Nils

Antworten
Nils
  • Forum-Beiträge: 8

12.12.2012, 21:42:47 via Website

Danke für die schnelle Hilfe.
Ich hab mir den String mal genauer angesehen. Über mobiles Internet wird tatsächlich ein " " weggelassen und zwar das hinter colspan=\"9\".
Jetzt funktioniert es auch über mobiles Internet.

Antworten
Gelöschter Account
  • Forum-Beiträge: 5.136

12.12.2012, 22:55:06 via Website

Wenn größere Stringinhalte zu vergleichen sind und es schwierig wird diese zu vergleichen, helfe ich mir oft damit einfach mal eben einen MD5 generator über die beiden Versionen laufen zu lassen. Das geht schnell und erlaubt eine rasche Aussage ob beide Quellen identisch sind ...

Beispielsweise so :

[quote]
public String MD5(String md5) {
try {
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
byte[] array = md.digest(md5.getBytes());
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; ++i) {
sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1,3));
}
return sb.toString();
} catch (java.security.NoSuchAlgorithmException e) {
}
return null;
}
[/quote]

lg Voss

Nils

Antworten