Java String auseinander nehmen

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
557
Hallo zusammen,

ich bin dabei Java zu lernen, wobei das auf Grund von Zeit immer nur in kleinen Schritten. Entgegen eines Buches mit ersten Einstiegregeln hab ich einen Blick nach Youtube geworfen und hier schöne Learn by Doing Videos gefunden.

Alles schön und gut - ein Grundlegende Basis ist also vorhanden.

Nun hab ich Arbeitsbedingt einen kleinen Ansporn und möchte mir selbst ein Programm schreiben.

Programm wird aufgerufen, surft beliebige Seiten an und speichert die HTML ausgabe des Apache in einen String -> dieser wird vom Programm weiter verwendet.

Ich scheitere aber an einer Stelle:

ich möchte nun den String durchsuchen nach einer gewissen Stelle bzw nach gewissen Worten.

Die gesammte Ausgabe interessiert mich nämlich überhaupt. Bei den Seiten handelt es sich um Status-Seiten die arbeitsbedingt für mich einen wichtigen Output liefern.

Also: wie durchsuche ich einen String?

Google war leider nicht so erfolgreich bzw konnte mir keine klare antwort geben.

Ich würde bei der Materia Java noch sagen, das ich in die Kategorie "Blutiger Anfänger" passe - daher bitte um nachsicht falls geballtes Wissen ich nicht nachvollziehen kann ;)

Danke & Gruß,
Blackbenji
 
Ich kann kein Java, aber grundsätzlich:

ich möchte nun den String durchsuchen nach einer gewissen Stelle bzw nach gewissen Worten.
Wortweise in einen Container/Array einlesen (d. h. bei jedem Leerzeichen splitten), durchlaufen bzw. durchsuchen. Sollte einfach machbar sein.

Gruß,

badday
 
dein programm kann schon über HttpURLConnection nen get abschicken und die response in nen buffer streamen?
und raus kommt ein string?
dann lass das ganze von einem htmlparser weiterverarbeiten und du kannst xml-style (bzw. html ist nix anderes als eingeschränktes xml) in DOM die knoten durchwandern.

http://htmlparser.sourceforge.net/
 
hier von Gallileo bücher
 
zum besseren Verständis mein bisherige schritt.

Code:
package tests;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;


import java.net.URL;

public class InternetIO {

	/**
	 * @param args
	 */
	@SuppressWarnings("deprecation")
	public static void main(String[] args) {
		try {
			InputStream is = null;
			String s = null;
			URL url = new URL("www.google.de");
			is = url.openStream();
			DataInputStream dis = new DataInputStream(new BufferedInputStream(is));
			while ((s = dis.readLine()) != null)
				System.out.println(s);
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

ich möchte anmerken, das der code-satz nicht von mir persönlich stammt, nur meinen anforderungen entsprechend das macht, was er soll. gefunden über google.

"s" enthält nun die ausgabe des webservers.

ich möchte nun wissen ob dadrin "Status: <span class="success">i.O.</span>" vorkommt.

wobei sich i.O natürlich ändern kann.

es handelt sich nur um consolen-output, also die weiterverarbeitung in xml usw. will ich garnicht. oder noch nicht ;)

ich weiß nicht ob die beiden links mir weiterhelfen, die anwendungsbeispiele sind ziemlich dürftig !?
 
weiterverarbeitung in xml?
dein string ist html bzw. xml. den wirst du nicht anders bekommen.
ob du das ganz zeilenweise, also SaX-mäßig auseinander nimmst, oder doch mehr Objektorientiert parst, ist da nebensache.

dein fall kannst aber ganz schnell und dreckig mit s.contains("span class='success'") abfragen.
 
Strings zu durchsuchen ist recht langsam, gerade wenn es große oder viele Strings sind. Dafür nutzt man Regular Expressions. Aber wenn der Response-String nicht all zu lang ist gehen auch die normalen String-Methoden wie weiter oben schon per Java-API gepostet.
Ich weiß ja nicht was da auf der Page ankommt, was Du suchst, aber womöglich könnte das ein Webservice schicker lösen. Da kommt dann nur das Ergebnis zurück, welches Du haben willst und keine komplette HTML-Page.
 
2fastHunter schrieb:
Strings zu durchsuchen ist recht langsam, gerade wenn es große oder viele Strings sind. Dafür nutzt man Regular Expressions.

Na wenn du reguläre Ausdrücke benutzt, ist es erst recht langsam.


2fastHunter schrieb:
Aber wenn der Response-String nicht all zu lang ist gehen auch die normalen String-Methoden wie weiter oben schon per Java-API gepostet.


Siehe oben, umso länger der String, umso schlechter sind RegEx als Wahl.
Aber es kommt natürlich auf die Aufgabe an, manchmal kommt man um reguläre Ausdrücke nicht drum herumm.
 
Zuletzt bearbeitet:
"Quick and dirty":

Code:
public static void main(String[] args) {
		try {
			InputStream is = null;
			String s = null;
			URL url = new URL("http://www.google.de");
			is = url.openStream();
			DataInputStream dis = new DataInputStream(new BufferedInputStream(is));
			StringBuffer buffer = new StringBuffer();
			while ((s = dis.readLine()) != null){
				buffer.append(s);
				int index = buffer.indexOf("Status: <span class=\"success\">i.O.</span>");
				if (index >= 0){
					System.out.println("String gefunden! Index: " + index);
					break;
				}
			}		
		} catch (MalformedURLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
 
Zurück
Oben