Methoden While Schleifen Ergebnis im String speichern

Waterfront

Mitglied
Ich bin mir nicht sicher ob ich den richtigen Präfix habe... 😀

Ähm ja mein problem ist, das ich den Inhalt einer Website komplett auslesen will & das Ergebnis davon dann in der Variable page speichern möchte.

Also dafür habe ich eine Methode geschrieben allerdings, möchte diese ein return Wert haben und dieser Return Wer müsste dann so lauten: return page;

Mein Problem ist aber wie ich das nun umsetze, das der das Ergebnis von der While Schleife in den String page setzt und dann page returned wird ???:L

Java:
	public static String readpage(String url) {
		String page;

		try {

			URL game = new URL(url);
			URLConnection connection = game.openConnection();
			BufferedReader in = new BufferedReader(new InputStreamReader(
					connection.getInputStream()));
			String inputLine;
			while ((inputLine = in.readLine()) != null) {
				System.out.println(inputLine);
			}
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}

		return page;
	}

So ich habe im Netz was von StringBuilder gesehen aber das waren immer nur For Schleifen und ich konnte dadurch das nicht für mein bsp umsetzen !?

LG
Water
 
Java:
public static String readpage(String url) { 
        try {
 
            URL game = new URL(url);
            URLConnection connection = game.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String inputLine;
            StringBuilder sb = new StringBuilder();
            while ((inputLine = in.readLine()) != null) {
                sb.append(inputLine);
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sb.toString();;
    }
 
Zuletzt bearbeitet:
oder mit Buffer:
Java:
public static String readpage(String url) {
		StringBuffer page = new StringBuffer();
		try {
			URL game = new URL(url);
			URLConnection connection = game.openConnection();
			BufferedReader in = new BufferedReader(new InputStreamReader(
					connection.getInputStream()));
			String inputLine;
			while ((inputLine = in.readLine()) != null) {
				page.append(inputLine);
			}
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return page.toString();
	}
 
solange der TO den String nicht zwingend thread-safe benötigt, ist imho StringBuilder vorzuziehen. Das sagt auch die Doku:
Every string buffer has a capacity. As long as the length of the character sequence contained in the string buffer does not exceed the capacity, it is not necessary to allocate a new internal buffer array. If the internal buffer overflows, it is automatically made larger. As of release JDK 5, this class has been supplemented with an equivalent class designed for use by a single thread, StringBuilder. The StringBuilder class should generally be used in preference to this one, as it supports all of the same operations but it is faster, as it performs no synchronization.
 
Zuletzt bearbeitet:
Woher soll ich von Anfang an wissen, das ich diese Methode immer nur aus einem Thread aufrufe? Meistens wachsen Projekte...

Ich benutze Thread unsafe Dinge extrem ungerne und solange ich keine Performance Probleme bekomme brauch ich mir über Optimierung auch noch keine Gedanken machen.

Gruß

Claus
 
Selbst wenn die Methode von mehreren Threads aufgerufen wird, ist ein StringBuffer imho unnötig. Die Manipulation des entsprechenden Strings erfolgt schließlich immer im selber Thread.

Der Aufruf der Methode aus mehreren Threads erzeugt schließlich auch mehrere StringBuilder. Erst wenn die Methode selbst mit mehreren Threads arbeitet, macht ein StringBuffer Sinn.

Kleinvieh macht schließlich auch Mist.

Ich behaupte also weiterhin, dass ein StringBuffer in der Methode unnötiger Overhead ist, lasse mich aber gern vom Gegenteil überzeugen. 🙂
 

Zurück
Oben