Zeilenumbruch mit Scanner erkennen

Sashgah

Mitglied
Guten Morgen zusammen, ich wollte ein Programm schreiben, womit man eine Eingabe mittels des Scanners in einer Zeile mit maximal einer Lücke und keinem Umbruch wiedergeben kann. Dabei habe ich das Problem, dass ich keinen Zeilenumbruch erkennen kann, was dazu führt, dass ich nach '//' nichts mehr wiedergebe. (Das Programm soll die Kommentarfunktionen nutzen können - '/*', '*/' und '//'.)

import java.util.Scanner;

public class Eingabe {

public static String filter(String start, String stop, String skip){

Scanner sc = new Scanner(System.in);

String eingabe = "";
String n = "";
boolean tfstart = false;
boolean tfskip = false;

while(sc.hasNext()){
n = sc.next();
if(n.equals(start) || tfstart == true){
tfstart = true;
if(n.equals(stop))
tfstart = false;
}
else if(n.equals(skip) || tfskip == true){
tfskip = true;
if(n.equals("\n")) // Ich muss hier prüfen können ob ein Zeilenumbruch
tfskip = false; // "eingegeben" wurde
}
else
eingabe += n + " ";
}
return eingabe;
}
public static void main(String [] args){
System.out.println(filter("/*","*/","//"));
}
}

Aus:
/*
* Programm: gibt "Hi!" aus
*/
public class Hi {
public static void main(String[] args) {
// Ausgabe der Nachricht
System.out.println("Hi!");
}
}
soll also:
public class Hi { public static void main(String[] args) { System.out.println("Hi!"); } }
werden.
 
Mein skip soll '//' realisieren können, also alles was nach '//' kommt ignorieren und in der nächsten Zeile wieder normal lesen. Stand jetzt wird alles was nach '//' kommt ignoriert.
 
Ja, halt wie bei dem normalen Kommentar, aber bei mir ignoriert der nicht nur die restliche Zeile, sondern den kompletten Rest.

ausgeben // nicht mehr ausgeben
ausgeben // nicht mehr ausgeben

Bei mir ist es aber leider:
ausgeben // nicht mehr ausgeben
nicht mehr ausgeben // nicht mehr ausgeben
 
Java:
Scanner s = new Scanner(System.in);

while (s.hasNext()) {
    String text = s.nextLine();

    int indexOf = text.indexOf("//");

    if (indexOf > 0) {
        System.out.println(text.substring(0, indexOf));
    } else {
        System.out.println(text);
    }

}

Du musst nextLine() verwenden
 
Danke, das war der entscheidende Tip. 🙂
Nun klappt alles.

import java.util.Scanner;

public class Eingabe {

public static void filter(String start, String stop, String skip){

Scanner sc = new Scanner(System.in);

String eingabe = "";
boolean tfstart = false;
boolean tfskip = false;
String text = "";
int indexOfStart = 0;
int indexOfStop = 0;
int indexOfSkip = 0;
String tmp = "";
int count = 0;

while(sc.hasNextLine()){

text = sc.nextLine();
indexOfStart = text.indexOf(start);
indexOfStop = text.indexOf(stop);
indexOfSkip = text.indexOf(skip);

if(text.contains(start) && text.contains(stop) && indexOfSkip >= indexOfStop){
eingabe += text.substring(0, indexOfStart);
eingabe += text.substring(indexOfStop + stop.length(), indexOfSkip);
}
else if(text.contains(start) && text.contains(stop)){
eingabe += text.substring(0, indexOfStart);
eingabe += text.substring(indexOfStop + stop.length(), text.length());
}
else if(text.contains(start)){
eingabe += text.substring(0, indexOfStart);
tfstart = true;
}
else if(text.contains(stop) && tfstart == true){
eingabe += text.substring(indexOfStop + stop.length(), text.length());
tfstart = false;
}
else if(tfstart == true)
continue;
else if(indexOfSkip >= 0)
eingabe += text.substring(0, indexOfSkip);
else if(text.equals(""))
continue;
else
eingabe += text + " ";
}

for (int i = 1; i <= eingabe.length(); i++){
tmp += eingabe.substring(i - 1, i);
if(eingabe.substring(i - 1, i).equals(" ")){
count++;
if(count == 2){
tmp = tmp.substring(0, tmp.length() - 1);
count = 1;
}
}
else if(count == 1 && !eingabe.substring(i - 1, i).equals(" "))
count = 0;
else
continue;
}
System.out.println(tmp);
}
}
 
Hier teile ich meine etwas kürzere Version.

[CODE lang="java" title="Eingabe"]import java.util.Scanner;
import java.io.PrintStream;
public class Eingabe {
public static int filter(Scanner sc, PrintStream ps,
String start, String stop, String skip) {
String zeile = "";
String wort = "";
Scanner scWort;
int c = 0;
boolean write = true;
while (sc.hasNext()) {
// Die Eingabe zeilenweise einlesen
zeile = sc.nextLine();
scWort = new Scanner(zeile);
// Die Zeilen wortweise einlesen
while (scWort.hasNext()) {
wort = scWort.next();
// Bei start wird "write" verboten
if (wort.equals(start)) {
write = false;
}
// Bei skip wird, falls "write" erlaubt ist, die ganze Zeile verworfen
if (write && wort.equals(skip)) {
break;
}
// Das Wort wird nur gespeichert, wenn "write" erlaubt ist
if (write) {
ps.append(wort + " ");
++c;
}
// Bei stop wird "write" wieder erlaubt
if (wort.equals(stop)) {
write = true;
}
}
scWort.close();
}
ps.append("\n");
return c;
}
}[/CODE]
 

Zurück
Oben