PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Überprüfen ob System.in leer ist / Regex Pattern für Whitespace



Aracon
17.01.2009, 19:22
Hi,

hat jemand eine Idee wie ich überprüfen kann, ob nichts per stdin übergeben wird?

ich lese den Sysin per


BufferedReader sysin = new BufferedReader(new InputStreamReader(System.in));

Leider funktioniert (sysin.toString).equals("") nicht. Hat da jemand eine Idee?

Außerdem möchte ich per string.replaceall() allen Whitespace um ein Pivotelement entfernen. Beispielsweise ("_" als Whitespace): "_______pivot____" soll einfach "pivot" werden.

Vielen Dank für Vorschläge!

supersucker
17.01.2009, 19:41
Leider funktioniert (sysin.toString).equals("") nicht. Hat da jemand eine Idee?

Ohne mich jetzt durch die API-Doku zu InputStream zu wühlen, sicher das du nicht null zurückkriegst bei keiner Eingabe und nicht einen leeren String?


Außerdem möchte ich per string.replaceall() allen Whitespace um ein Pivotelement entfernen. Beispielsweise ("_" als Whitespace): "_______pivot____" soll einfach "pivot" werden.

Und wo ist das Problem?

-> http://java.sun.com/j2se/1.5.0/docs/api/


String replaceAll(String regex, String replacement)
Replaces each substring of this string that matches the given regular expression with the given replacement.

Also in deinem Fall (ungetestet):


meinString.replaceAll('\s+','')

P.S.: Remember, java-strings are immutable.........

der_Kay
24.01.2009, 15:06
Hier ein paar Tipps:


Mach den InputStream austauschbar, verwende einen Lesepuffer und BufferedReader.read(char[] cbuf, int off, int len). Hänge den Output an einen StringBuilder an. Robuster, effizienter und kann mit Inputs umgehen, die nicht auf newlines enden. Das erledigt auch das Problem mit leeren Inputs.
Verwende Pattern, um mehrzeilige Inputs zu bearbeiten und Groß-und Kleinschrift zu ignorieren.
Das Pattern würde ich wie im Code unten formulieren; so funktioniert es auch, wen "pivot" am Eingabeanfang oder -ende steht.



import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.regex.Pattern;

public class Main {

public static void main(String[] args) {
final InputStream SOURCE = System.in;
StringBuilder sb = new StringBuilder();
BufferedReader rdr = new BufferedReader(new InputStreamReader(SOURCE));
final Pattern pPivotSource = Pattern.compile("\\s*(pivot)\\s*", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE);
char buffer [] = new char [256];
int nBytes;

try {
while ((nBytes = rdr.read(buffer, 0, buffer.length)) > 0) {
sb.append(buffer, 0, nBytes);
}
} catch (IOException ex) {
ex.printStackTrace(System.err);
}

System.out.println(pPivotSource.matcher(sb.toStrin g()).replaceAll("$1"));
}
}