Java Methode um doppelte Leerzeichen zu entfernen in einem String? Siehe Foto?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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;
  }
}
Woher ich das weiß:Berufserfahrung
Nichtsnutz12 
Fragesteller
 14.05.2019, 14:28

oha danke voll schlau ejjj wieso komm ich nie drauf

0

ersetze einfach zwei Leerzeichen mit einem und das ein paar mal

Suboptimierer  14.05.2019, 13:20

Oder in einer Schleife solange, bis keine Ersetzung mehr vorgenommen wurde. 

1
dreitreshimeil  14.05.2019, 13:23
@Suboptimierer

Ja daran dachte ich auch, ich hatte aber keine Lust das noch zu schreiben

also prüfen ob sich etwas ändert

1
Nichtsnutz12 
Fragesteller
 14.05.2019, 13:26

hmm ok also wie soll ich die schleife bauen wie soll die Abbruchbedingung heißen?

0

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, " ");
Woher ich das weiß:Berufserfahrung
Nichtsnutz12 
Fragesteller
 16.05.2019, 00:10

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!!

1

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();
	}
ArchEnema  14.05.2019, 13:48

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().

2
daCypher  14.05.2019, 15:07
@ArchEnema

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;
	}
1
ArchEnema  14.05.2019, 15:12
@daCypher

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. ;-)

1
Nichtsnutz12 
Fragesteller
 16.05.2019, 00:09
@ArchEnema

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!!

0

String.replaceAll(" +", " ") geht auch für mehr als 2. Schau dir mal RegEx an

Nichtsnutz12 
Fragesteller
 16.05.2019, 00:06

Hab schon versucht das geht nicht das kuckt nach dem + Zeichen und ersetzt das + Zeichen völliger Quatsch

1