Wiederholte Ausgabe vermeiden

abx912

Mitglied
Hallo zusammen!
Habe mich hier gerade erst angemeldet also bitte gnädig sein, falls ich mich undeutlich formuliere oder im falschen Unterforum bin!

Zu meinem Problem:
Ich habe eine Methode, die einen String spaltet und bei jedem Aufruf, den nächsten Teilstring ausgibt.
Als Beispiel: Wenn meine ursprüngliche Eingabe "a b c d e " ist, soll beim ersten Aufruf erst "a" ausgegeben werden, beim nächsten Aufruf "b" usw. bis mein letzter Aufruf "e" ausgibt. Es sollen auch beliebig viele Leerzeichen am Anfang, Ende und zwischendrin verarbeitet werden.

(Ich sehe gerade bei der Vorschau, dass etwas nicht übernommen wurde: In der Eingabe befinden sich mehrere Leerzeichen zwischen den Buchstaben und nach dem "e")

Meine Methode macht all das, bis auf eines: Wenn ich bei meiner letzten Ausgabe angekommen bin, also hier das "e", dann wird bei jeder weiteren Ausgabe immer das "e" ausgegeben.
Meine Methode sieht wie folgt aus:

Java:
public String ausgabe () {

        text=text.trim();
        
        String [] Split = text.split(" ");
        
            for (int i=0; i<Split.length;){
                System.out.println(Split[i]);
                text=text.substring(text.indexOf(" ")+1);               
                break;
            }
        return text;
            
    }

Meine Ausgabe ist dementsprechend:
Java:
a
b
c
d
e
e //ab hier wiederholt sich die Ausgabe, sobald ich die Methode weiter aufrufe
e
e
e

Ich hätte gerne, dass nachdem das "e" ausgegeben wurde, nichts mehr ausgegeben wird. Oder ich dementsprechend etwas einbauen kann wie "keine Zeichen" o.ä.
Ich hab schon rausgelesen, dass Java entsprechende Methoden hat, aber alles spaßige aus java.util ist natürlich nicht erlaubt zu benutzen ;)
 

temi

Top Contributor
Nur zum Verständnis:

Die Methode ausgabe() wird von dir mehrfach aus der main() aufgerufen?

Sie soll bei jedem Aufruf ein einzelnes Zeichen, beginnend mit dem ersten Zeichen und endend mit dem Letzen, unter Auslassung der Leerzeichen, ausgeben?

Ist das (so ungefähr) der Wortlaut der Aufgabe?

Edit: Dazu musst du ja den gegebenen String immer entsprechend kürzen (oder du merkst dir irgendwo, welche Position die letzte gewesen ist). Am einfachsten wäre es beim ersten Zeichen zu beginnen, es auszugeben und dann aus dem String zu entfernen. Nach dem letzten ausgegebenen Zeichen ist nichts mehr da, was ausgegeben werden könnte. Leerzeichen können jeweils direkt entfernt werden.

Edit2: Falls du sie "in einem Rutsch" ausgeben möchtest, dann geht das recht einfach.
Code:
Initialisiere i mit 0.
Solange i kleiner ist als die Länge des Strings:
    Setze Zeichen c gleich dem i-ten Zeichen des Strings
    Wenn c keine Leerzeichen ist, dann gebe c aus
    Erhöhe i um eins.
Das i-te Zeichen im String erhältst du mittels charAt().
 
Zuletzt bearbeitet:

abx912

Mitglied
Laut Aufgabe soll die Methode "das nächste Zeichen oder, falls keine Zeichen mehr vorliegen, null ausgeben". Im allgemeinen Aufgabentext steht noch "üblicherweise werden nicht direkt alle Zeichen zurück gegeben, sondern nach Aufforderung das jeweils nächste".

Und ja, ich rufe in der Main manuell die Methode auf, also keine for-schleife oder ähnliches. Obwohl ich das auch schon versucht habe, allerdings ändert das meine Ausgabe nicht sonderlich.

Bei zB. einem String aus insgesamt 3 Zeichen, ("hallo 3a w35fb"), rufe ich ausgabe() 3 (bzw 4) mal auf und sollte dann nacheinander
-hallo (als erste Ausgabe)
[zB Aufruf von einer anderen Methode um die Länge des Reststrings zu bestimmen]
-3a (zweiter Aufruf von ausgabe())
-w35fb (dritter Aufruf von ausgabe())
- null (als vierter Aufruf von ausgabe())
ausgeben.

Leerzeichen sollen ignoriert/gelöscht/nicht beachtet/nicht ausgegeben werde. Deswegen das Löschen durch .trim() und Splitten des Strings an den Leerzeichen.
 

temi

Top Contributor
text=text.substring(text.indexOf(" ")+1);
Das Problem liegt hier. Das funktioniert nicht zuverlässig.

Einfacher wäre es, wenn du auf split() verzichtest und mittels charAt() auf die Zeichen zugreifst. Dann überlege dir wie viele Zeichen du jeweils mit substring() am Anfang abschneiden musst.

Zum Beispiel: " a b "

Bei ersten Aufruf wird "a" ausgegeben und zwei Zeichen müssen entfernt werden " a".
Beim zweiten Aufruf wird "b" ausgegeben und ein Zeichen muss entfernt werden "b".
Beim dritten Aufruf wird nichts ausgegeben und das letzte Leerzeichen entfernt.
String ist jetzt leer.
 

abx912

Mitglied
Das würde dann aber nur funktionieren, wenn ich die Eingabe kenne oder ?
Ich teste das zwar an meinem eigenen Beispiel, wollte es aber ursprünglich allgemeiner halten.
 

temi

Top Contributor
Das würde dann aber nur funktionieren, wenn ich die Eingabe kenne oder ?
Das wäre nicht gut.

Meine Version davon liefert folgendes Ergebnis:
Java:
        String str = "a b       c d e ";

        str = ausgabe(str);
        System.out.println(str);

        str = ausgabe(str);
        System.out.println(str);

        str = ausgabe(str);
        System.out.println(str);

        str = ausgabe(str);
        System.out.println(str);

        str = ausgabe(str);
        System.out.println(str);

        str = ausgabe(str);
        System.out.println(str);
Ausgabe
Code:
a
b       c d e
b
       c d e
c
d e
d
e
e
null
null
 
Zuletzt bearbeitet:

abx912

Mitglied
Also wenn ich mit charAt() rumprobiere, kriege ich im besten Fall nur die einzelnen Buchstaben ausgegeben und im schlechtesten Fall eine Fehlermeldung.
Auch wenn der String aus Worten besteht, werden die Worte aufgeteilt.
Aus zB. "hallo" wird dann
h
a
l
l
o

Wenn ich split() weglasse, ich dann nicht mehr über den Split-Array, sondern über text.length() ?
Und wie oben gesagt, greife ich mit charAt() nur auf einzelne Buchstaben zu. Muss ich das zwischendurch noch in nem neuen String speichern, damit ich am Ende das Wort kriege ?
 

temi

Top Contributor
Also wenn ich mit charAt() rumprobiere, kriege ich im besten Fall nur die einzelnen Buchstaben ausgegeben und im schlechtesten Fall eine Fehlermeldung.
Auch wenn der String aus Worten besteht, werden die Worte aufgeteilt.
Aus zB. "hallo" wird dann
h
a
l
l
o

Wenn ich split() weglasse, ich dann nicht mehr über den Split-Array, sondern über text.length() ?
Und wie oben gesagt, greife ich mit charAt() nur auf einzelne Buchstaben zu. Muss ich das zwischendurch noch in nem neuen String speichern, damit ich am Ende das Wort kriege ?
Dann habe ich dich wohl mißverstanden. Ich dachte du sollst die Buchstaben, bis auf die Leerzeichen, einzeln ausgeben. Sorry!

Aus der bisherigen Beschreibung der Aufgabe war das für mich nicht ersichtlich.
Laut Aufgabe soll die Methode "das nächste Zeichen oder, falls keine Zeichen mehr vorliegen, null ausgeben"
Das klingt für mich wie ein einzelnes Zeichen.
 

abx912

Mitglied
Bei zB. einem String aus insgesamt 3 Zeichen, ("hallo 3a w35fb"), rufe ich ausgabe() 3 (bzw 4) mal auf und sollte dann nacheinander
-hallo (als erste Ausgabe)
[zB Aufruf von einer anderen Methode um die Länge des Reststrings zu bestimmen]
-3a (zweiter Aufruf von ausgabe())
-w35fb (dritter Aufruf von ausgabe())
- null (als vierter Aufruf von ausgabe())
ausgeben.

Ne entschuldige, dann hab ich mich falsch ausgedrückt.
Das sollte so wie in dem Beispiel hier sein. Also die Einzelnen Elemente eines Strings jeweils ausgeben. Nicht Buchstabe für Buchstabe, sondern "Stringteil" für "Stringteil".

Für einen Eingabestring "a bb c" jeweils pro Aufruf "a", "bb", "c"
Für einen Eingabestring "1 vbhj 56 G TULPE", jeweils pro Aufruf "1", "vbhj", "56", "G", "TULPE"
Und dann entsprechend mit wilder Anzahl an Leerzeichen im String.
 

MoxxiManagarm

Top Contributor
Für mich klingt die Aufgabenstellung nach einem Iterator, der Scanner ist übrigens auch einer, falls der erlaubt ist

Edit: Zu spät gesehen, dass util wieder nicht erlaubt ist ;-)
 
Zuletzt bearbeitet:

abx912

Mitglied
Ich glaub, wenn java.util erlaubt wäre, wäre die Aufgabe an sich etwas witzlos :D Also für mich nicht, ich hätte nichts dagegen gehabt, wenn man meine Programmierkenntnisse bedenkt, aber von Seiten des Dozenten und wahrscheinlich für jemanden, der Programmieren kann.

Danke trotzdem für die Hilfe hier! Habe mir nicht zu große Hoffnungen gemacht, dass es auf die schnelle gelöst wird. Das Programm läuft (ein Wunder an sich und ein Erfolg für mich!!), bis eben auf diese kleine Sache. Ich nenne sie mal "Schönheitsfehler".
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Die Idee an sich ist ja nicht schlecht, Du musst halt beachten, dass indexOf() den Wert -1 liefert, wenn das gesuchte Zeichen nicht im String enthalten ist.
 

abx912

Mitglied
Die Idee an sich ist ja nicht schlecht, Du musst halt beachten, dass indexOf() den Wert -1 liefert, wenn das gesuchte Zeichen nicht im String enthalten ist.
Auch wenn der Eingabestring nur "hallo" enthält, komplett ohne Leerzeichen und weitere Wörter oder Elemente, wird bei jedem Aufruf "hallo" ausgegeben, ohne Fehlermeldung.

Es könnte auch noch Probleme geben, wenn mehrere Leerzeichen hintereinander im String sind.
Genau das ist Teil der Aufgabe und es gibt auch mehrere Leerzeichen in der Eingabe, die werden aber ohne Probleme verarbeitet.
Auch wenn die Eingabe nur aus Leerzeichen besteht, gibt es dann quasi ne leere Ausgabe, aber keine Fehlermeldung

Vielleicht nochmal zur Verdeutlichung:
Das soll die Methode machen.
Code:
Eingabe als String: "  da s ist   ein BEIspiel  ! 4     "
Dann soll bei jedem (manuellen) Aufruf der Methode folgendes ausgegeben werden:
da
s
ist
ein
Bsp
!
4
null
null
null

Wenn man bzw. ich die Methode von oben so ausführt wie sie ist, gibt es keine "Probleme" oder Fehlermeldungen, aber eben folgende Ausgabe:
Code:
Eingabe als String: "  da s ist   ein BEIspiel  ! 4     "
Ausgabe:
da
s
ist
ein
Bsp
!
4
4 //ab hier ist mein Problem, denn hier und in den weiteren Ausgaben
4 //sollte null stehen
4
4
4
 

abx912

Mitglied
Genau das ist es. Dieses letzte Element bleibt, was immer das auch sein mag.
Bei längeren Eingaben wird er kleiner, aber eben nicht komplett leer. Daher bleibt diese Ausgabe des letzten/einziges Elements.

Da mein Beispiel mehrere Elemente enthält und bei jedem Aufruf kleiner wird, habe ich zuerst angenommen, dass die Methode korrekt funktioniert, bis ich bei der letzten Ausgabe nicht weitergekommen bin. Habe zuerst gedacht ich müsste eine Fehlermeldung kriegen, weil ich beim letzten Update von "text" mit substring quasi was nicht vorhandenes in "text" kopiere, aber er scheint entweder nichts zu machen oder eben sich selber zu kopieren.
 

mihe7

Top Contributor
Überleg doch mal, welche Möglichkeiten es gibt.

1. Der String ist leer, dann sollst Du null ausgeben.
2. Ansonsten gibt es zwei Fälle:
2.1 Es gibt ein Leerzeichen im String -> neuer Text = nach dem Leerzeichen
2.2 Es gibt kein Leerzeichen im String -> neuer Text ist leerer String
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
B wiederholte Button-Aktion Java Basics - Anfänger-Themen 3
S Ausgabe des Variablenwerts Java Basics - Anfänger-Themen 10
I Ausgabe nicht nur senkrecht sondern auch waagerecht. Java Basics - Anfänger-Themen 2
paulen1 Methoden Unerwünschte Ausgabe bei System.out.print in For-Schleife Java Basics - Anfänger-Themen 8
C Ausgabe boolean return ((n==9)||(n==0)); Java Basics - Anfänger-Themen 13
F Double Ausgabe nicht wissenschaftlich Java Basics - Anfänger-Themen 16
danieldemetry Java - Graph Komponenten - Ausgabe Java Basics - Anfänger-Themen 0
S Fragen zu Ausgabe double und float Java Basics - Anfänger-Themen 3
B Ausgabe in TextArea funktioniert nicht Java Basics - Anfänger-Themen 2
D BigDecimal Ausgabe sehr lang. Java Basics - Anfänger-Themen 2
J String Ausgabe Java Basics - Anfänger-Themen 2
TimoN11 IntelliJ , Ausgabe von einem Quellcode in Eingabe eines Quellcodes Java Basics - Anfänger-Themen 1
Kalibru Problem bei Ausgabe von Objekt Java Basics - Anfänger-Themen 1
KogoroMori21 Array-Ausgabe Java Basics - Anfänger-Themen 6
JaVaN0oB Wörterraten - Falsche Ausgabe, String/Chars vergleichen Java Basics - Anfänger-Themen 2
E Ausgabe überschreiben Java Basics - Anfänger-Themen 15
D Ausgabe von Array Java Basics - Anfänger-Themen 2
U Ausgabe Java Basics - Anfänger-Themen 4
J Buchstabenhäufigkeit mit Array und Ausgabe des häufigsten Buchstaben Java Basics - Anfänger-Themen 25
V Multiplikationstafel - Ausgabe Java Basics - Anfänger-Themen 4
L Warum ist die Ausgabe anders als das was im Bezeichner steht? Java Basics - Anfänger-Themen 4
M In gleicher zeile hinter ausgabe noch etwas ausgeben Java Basics - Anfänger-Themen 1
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
H Falsche Ausgabe Java Basics - Anfänger-Themen 2
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
D Warum erfolgt folgende Ausgabe und warum? Java Basics - Anfänger-Themen 4
C Ausgabe in der Konsole Java Basics - Anfänger-Themen 11
M Problem bei Ausgabe Java Basics - Anfänger-Themen 7
C Konvertierung des int typs in den double typ für die Ausgabe mit Nachkommastellen Java Basics - Anfänger-Themen 4
A Ausgabe mit boolean Java Basics - Anfänger-Themen 3
K Probleme bei der Ausgabe - komme nicht weiter :/ Java Basics - Anfänger-Themen 15
G Problem bei der Ausgabe einer Main Claase Java Basics - Anfänger-Themen 7
Y Methode + Parameters + Ein und Ausgabe Java Basics - Anfänger-Themen 1
K Methodenaufruf /-ausgabe Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
M Wie analysiert JSON eine toString-Ausgabe ? Java Basics - Anfänger-Themen 1
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
T Ausgabe einer for Schleife Java Basics - Anfänger-Themen 2
S Elemente eines Arrays bei Ausgabe auslassen Java Basics - Anfänger-Themen 2
M Ausgabe einer Liste welche mehrere Stacks enthält Java Basics - Anfänger-Themen 3
T Text-Ausgabe für Textadventure - Organisation Java Basics - Anfänger-Themen 5
G Unterklassen (Klasse für Ausgabe) Java Basics - Anfänger-Themen 4
N Eingabe des Users direkt hinter die Ausgabe Java Basics - Anfänger-Themen 3
J Methode zur Ausgabe eines Dreiecks aus Sternen schreiben? Java Basics - Anfänger-Themen 2
ZH1896ZH Wieso diese Ausgabe?? Java Basics - Anfänger-Themen 10
J Fragen zum Code aus dem Buch "Schrödinger programmiert Java 2.te Ausgabe" Java Basics - Anfänger-Themen 6
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
K Rechtsbündige Ausgabe von Zahlen Java Basics - Anfänger-Themen 6
V Erste Schritte for-Schleife; Ausgabe soll alle 5 Sekunden erfolgen. Java Basics - Anfänger-Themen 4
X Threads Zwei Threads, aber doppelte Ausgabe verhindern (synchronized) Java Basics - Anfänger-Themen 54
J Ausgabe Gesamtpreis Java Basics - Anfänger-Themen 39
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
B HQL / Hibernate, GroupBy und Ausgabe als Double Java Basics - Anfänger-Themen 1
J StrinBuffer in der Ausgabe Java Basics - Anfänger-Themen 4
H ausgabe? Java Basics - Anfänger-Themen 32
B Ausgabe Zahlenreihe Horizontal Java Basics - Anfänger-Themen 3
V Neue Ausgabe von toString nach Methodenaufruf Java Basics - Anfänger-Themen 9
N Wochentagberechner Ausgabe funktioniert nicht Java Basics - Anfänger-Themen 7
K Array Ausgabe Java Basics - Anfänger-Themen 2
L Datentypen Ausgabe von eigenem Datentypen Java Basics - Anfänger-Themen 2
C 1x1 Ausgabe auf dem Bildschirm Java Basics - Anfänger-Themen 3
L Fehler im Programm bei Ausgabe Java Basics - Anfänger-Themen 21
J Doppelte Ausgabe erzeugen Iterator Java Basics - Anfänger-Themen 6
F Warum ist die Ausgabe hier 1? Java Basics - Anfänger-Themen 4
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
H Ausgabe Java Basics - Anfänger-Themen 6
U Ausgabe von Dateiinhalt während Programmnutzung fehlerhaft Java Basics - Anfänger-Themen 3
Jackii ArrayList ausgabe ohne Dopplung Java Basics - Anfänger-Themen 11
F Erste Schritte Subnet Calculator - Ausgabe der NetID und der Broadcast Java Basics - Anfänger-Themen 4
D Wiederholende Ausgabe Java Basics - Anfänger-Themen 3
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
A Datei Ein und Ausgabe FileWriter und printWriter Java Basics - Anfänger-Themen 5
S Doppel For Schleife mit Arrays - Problem bei der Ausgabe Java Basics - Anfänger-Themen 4
A Erste Schritte Ausgabe eines compare Programms Java Basics - Anfänger-Themen 4
I Input/Output System.out Ausgabe aktualisieren, ohne Konsole vollzuspamen Java Basics - Anfänger-Themen 2
D Input/Output ArrayList ausgabe Java Basics - Anfänger-Themen 4
B toString mit optionaler Ausgabe überrschreiben Java Basics - Anfänger-Themen 5
D Auswahl und Ausgabe erstes Programm Java Basics - Anfänger-Themen 8
I Ausgabe von Arrays Java Basics - Anfänger-Themen 2
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
karlmasutra Ausgabe in ein Array schreiben Java Basics - Anfänger-Themen 14
L Scanner Ausgabe Java Basics - Anfänger-Themen 37
L Input/Output Wieso kommt diese Ausgabe? Java Basics - Anfänger-Themen 12
G Methode liefert "Min@15db9742" als Ausgabe Java Basics - Anfänger-Themen 2
S Vergleich zweier ArrayLists mit Ausgabe an dritte ArrayList Java Basics - Anfänger-Themen 5
S While-Schleifen Ausgabe als String? Java Basics - Anfänger-Themen 1
T Input/Output Leerzeilen in Ausgabe -> finde den Fehler nicht Java Basics - Anfänger-Themen 10
L Reihenfolge Ausgabe Java Basics - Anfänger-Themen 5
L Variablen CharArray Ausgabe - Buchstabensalat Java Basics - Anfänger-Themen 5
T Vergleich und Ausgabe von Zahlen Java Basics - Anfänger-Themen 1
M Ausgabe einer kleinen Aufgabe Java Basics - Anfänger-Themen 2
N Datei Zeilenweise einlesen, Ausgabe mehrere Arrays Java Basics - Anfänger-Themen 7
O Ausgabe als .txt Datei speichern mit FileWriter Java Basics - Anfänger-Themen 2
M Erste Schritte Doppelte Ausgabe? (JList) Java Basics - Anfänger-Themen 1
Henri Die Ausgabe stimmt leider nicht Java Basics - Anfänger-Themen 9
D Array Ausgabe Java Basics - Anfänger-Themen 2
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 13
TomatenBrot447 Mit toString eine Ausgabe liefern wie in einer schon implementierten Methode ? Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben