stream in string[] speichern

Diskutiere stream in string[] speichern im Java Basics - Anfänger-Themen Bereich.
Dimax

Dimax

Guten Tag,
ich versuche ein stream in ein String [] zu speichern.
Das Problem ist das ich vor dem Einlesen ein String [] erstellen muss,aber ich weiß nicht wie gros es wird.

Code:
URL url=new URL(url);
        InputStreamReader is = new InputStreamReader(url.openStream());
        BufferedReader r = new BufferedReader(is);
        String [] arr;
        String line=null;
        //FileOutputStream fis = new FileOutputStream(file);
        //byte[] buffer = new byte[1024];
        int count=0;
        while((line=r.readLine())!=null){
            //arr[i]=line;
            ++count;
        }
        arr=new String[count];
Wie kriegt man raus wie viele Zeilen in einem Stream gibt's vor dem Speichern?
 
Flown

Flown

Ich würde das so kürzen:
Java:
URL url = new URL("url");
try (InputStreamReader is = new InputStreamReader(url.openStream());
     BufferedReader r = new BufferedReader(is);
     Stream<String> lineStream = r.lines()) {
  String[] lines = lineStream.toArray(String[]::new);
}
 
J

JustNobody

Das wird so relativ schwer, da diese <a> und </a> ja nicht in einer Zeile stehen müssen. Daher macht es dann doch mehr Sinn, hier eine Library wie Jsoup zu nutzen, die mit html umgehen kann.

Wenn Du aber davon ausgehst, dass <a> und </a> immer in einer Zeile vorkommen und dich nur diese Fälle interessieren, dann wäre möglich:
a) erst mittels map einen neuen String generieren, der nur noch den Teilstring zwischen dem <a> und </a> enthält.
b) dann mittels filter alle Elemente heraus filtern, die leer sind (wo also step a nicht geholfen hat.)

Und dann stolperst Du ggf. noch über mehrere Elemente auf einer Zeile und dann kommen wir automatisch zu flatMap. Und schwups: schon kann der Step b auch entfallen und es reich ein flatMap aus, das eben aus einem String Element 0 oder mehr String Elemente erzeugt...

Aber wie gesagt: Auswertung von html würde ich nicht so von Hand machen. Das ist nur als Übung interessant, damit man map / flatmap etwas kennen lernen kann ...
 
I

insert2020

Der Scanner hat eine (schöne) findAll-Methode...
Java:
	public static String[] links(String page) throws IOException {
		Pattern pattern = Pattern.compile("<a [^>]+>([^<]+)</a>");
		try (Scanner s = new Scanner(new InputStreamReader(new URL(page).openStream()))) {
			return s.findAll(pattern).map(mr -> mr.group(1)).toArray(String[]::new);
		}
	}

	public static void main(String[] args) throws IOException {
		String[] links = links("https://stackoverflow.com/questions/28148483/how-do-i-create-a-stream-of-regex-matches");
		for (String string : links) {
			System.out.println(string);
		}
	}
Insgesamt aber nicht sehr robust.
 
Thema: 

stream in string[] speichern

Passende Stellenanzeigen aus deiner Region:
Anzeige

Neue Themen

Anzeige

Anzeige
Oben