Java Methode um doppelte Leerzeichen zu entfernen in einem String? Siehe Foto?
Also bei der Aufgabe muss man Wörter zählen ja ich habs aus hast hingekriegt,
wie entfern ich Leerzeichen die nach einem Leerzeichen kommen? Also ich weiß wie ich alle Leerzeichen entferne aber dann kann ich ja nicht mehr zählen wie kann ich doppelte Leerzeichen entfernen kurz und knackig in einer Zeile? xD
Mit freundlichen Grüßen
6 Antworten
Du zählst mit deiner Schleife letztlich Leerzeichen, nicht Wörter.
Ich würde einmal über den String rennen und jeden Übergang von Nichtleerzeichen auf Leerzeichen (oder auf Stringende) als Wort zählen. Damit bist du fertig. Also im Grunde Wortenden zählen.
Etwa so:
int count = 0;
for (int i = 0; i < x.length; ++i) {
if (x.charAt(i) != ' ' && (i+1 == x.length || x.charAt(i+1) == ' ')) {
++count;
}
}
oha danke voll schlau ejjj wieso komm ich nie drauf
ersetze einfach zwei Leerzeichen mit einem und das ein paar mal
Ja daran dachte ich auch, ich hatte aber keine Lust das noch zu schreiben
also prüfen ob sich etwas ändert
hmm ok also wie soll ich die schleife bauen wie soll die Abbruchbedingung heißen?
Ich weiß, Java ist nicht gleich JScript, aber ich bin mir sicher, dass der Unterschied nicht so gewaltig ist, dass man nicht schnell die passenden Pendants der Befehle finden kann.
Ich kann drei Lösungen anbieten.
Die erste Lösung ist die ausführliche Lösung zufuß:
sSingleBlanked = sBlanked.replace(" ", " ");
while(sSingleBlanked != sBlanked){
sBlanked = sSingleBlanked;
sSingleBlanked = sBlanked.replace(" ", " ");
}
Die zweite Lösung ersetzt mehrere Leerzeichen durch eines mittels einer Schleife ohne Rumpf:
for(sSingleBlanked = sBlanked.replace(" ", " "); sSingleBlanked != sBlanked; sBlanked = sSingleBlanked, sSingleBlanked = sBlanked.replace(" ", " "));
Die letzte Lösung bedient sich der regulären Ausdrücke:
sSingleBlanked = sBlanked.replace(/ */g, " ");
Ok danke Ich hab die Lösung!!! Viel einfacher! Na da wo ich überprüfe ob es ein Leerzeichen ist hab ich hingemacht && x.charAt(i + 1) != ' ' und tada Problem gelöst Aufgabe funktioniert!!
Ich würde den String einfach mit x.split in eine Liste umwandeln und alle leeren Elemente rausschmeißen.
public static int woerterZaehlen(String x){
ArrayList<String> woerter = new ArrayList<String>();
woerter.addAll(Arrays.asList(x.split(" ")));
woerter.removeAll(Arrays.asList("", null));
return woerter.size();
}
Ich glaube ja nicht, dass die Aufgabe die Verwendung von Bibliotheksfunktionen ist. Ich glaube eher, man soll das "von Hand" tun, um die Sprache zu lernen. ;-))
Sieht auch nach einem Lernframework aus. D.h. an Arrays.asList() wird man möglicherweise gar nicht rankommen (import-Anweisungen werden wohl nicht gehen, ggf. direkte Angabe?), vielleicht auch nicht an String.split().
hmm, stimmt. Wenn Listen nicht erlaubt sind, dann ist die einfachste Methode wahrscheinlich wirklich alle doppelten Leerzeichen rauszuschmeißen und am Ende die Anzahl Leerzeichen + 1 auszugeben.
public static int woerterZaehlen(String x){
while (!x.equals(x.replaceAll(" ", " "))){
x = x.replaceAll(" ", " ");
}
if (x.length() == 0) return 0;
return x.length() - x.replaceAll(" ", "").length() + 1;
}
Selbst das replaceAll "stinkt" wohl. Die Schüler sollen Schleifenkonstrukte und if-Statements lernen, nicht Reguläre Ausdrücke. Die sind natürlich auch nützlich, aber seien wir ehrlich, das ist eigentlich 'ne eigene Programmiersprache und kein Java...
Ich hab mal 'ne simple Lösung nur mit for-Schleife, if und boolscher Logik skizziert (sofern ich keinen Fehler eingebaut hab, ist ungetestet). IMO eine Lehrbuchlösung. ;-)
Ich hab die Lösung!!! Viel einfacher! Na da wo ich überprüfe ob es ein Leerzeichen ist hab ich hingemacht && x.charAt(i + 1) != ' ' und tada Problem gelöst Aufgabe funktioniert!!
String.replaceAll(" +", " ") geht auch für mehr als 2. Schau dir mal RegEx an
Hab schon versucht das geht nicht das kuckt nach dem + Zeichen und ersetzt das + Zeichen völliger Quatsch
Oder in einer Schleife solange, bis keine Ersetzung mehr vorgenommen wurde.