3 Stimmen

java.util.Scanner Restinhalt lesen

Mit einer java.util.Scanner Instanz, ist es möglich, dass sie alle verbleibenden Inhalte zurückgibt? Mein Szenario ist, dass ich nach dem Lesen einer Reihe von Feldern innerhalb einer String Ich möchte einfach alles, was übrig ist, abrufen und an einem anderen Ort speichern. Zum Beispiel könnte mein Inhalt umfassen:

1,2,Some Garbage with \' special characters and so on

Ich würde den Scanner wie folgt konstruieren , als Begrenzungszeichen, rufen Sie getInt() zweimal und wollen dann "Some Garbage with \' special characters and so on" mit einem einzigen Anruf zurück.

5voto

lucasvc Punkte 681

Als AlexRs Antwortpunkte Es sollte besser sein, den ursprünglichen Stream zu lesen - aber in meinem Fall ist er verbraucht und kann nicht gelesen werden.

Es gibt ein Sonderzeichen / Deliminter in Scanner alle" zu lesen: \\A . Wenn Sie also den Rest des Scanners wollen, können Sie ihn ändern:

scanner.useDelimiter("\\A");
String content = scanner.hasNext() ? scanner.next() : null;

2voto

AlexR Punkte 111534

Es gibt keinen "guten" Weg, dies mit Scanner zu tun. Sie können versuchen String next(Pattern pattern) dazu übergehend mehrzeilig Muster wie $ :

Pattern p = Pattern.compile("$", Pattern.MULTILINE);

Ich habe dies nicht ausprobiert, aber es wird wahrscheinlich funktionieren. Vergessen Sie nur nicht, es zu überprüfen, wenn mehrere Zeilen in Ihrer Eingabe übrig sind.

BUT Ich denke, dass der bessere Weg ist, nur von gewickelten Eingabestrom mit gewöhnlichen lesen read(byte[]) Methode in der Schleife. Der Grund dafür ist, dass der Scanner nicht darauf achtet, den Stream als solchen zu lesen. Er ist darauf ausgerichtet, einzelne Felder zu lesen. Und das tut er sehr gut. In Ihrem Fall wollen Sie nur "Blob" lesen, also lesen Sie es einfach mit Payload Stream.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X