Java schwierige Aufgabe alle Buchstaben eines Strings zwischen "z" und "p" entfernen wer kann mir helfen??

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wenn Du es selbst programmieren sollst, ist es einfacher, das erste 'z' und das letzte 'p' zu suchen und danach, wenn Fundstelle 2 nach Fundstelle 1 liegt, Zeichen ab Fundstelle1+1 bis Fundstelle2-1zu entfernen.

Bei i hast Du ein "z" entdeckt (allerdings kein "Z"). Wenn zwei Stellen weiter ein "p" ("P" würde nicht erkannt) auftaucht, dann b+="zp", b wird um zp ergänzt.

Wird kein z oder kein p erkannt, dann count erhöht (count++). Was soll jetzt diese Modulo-Bedingung? Macht keinen Sinn, und das ist schon ein Fehler. Was Du willst, ist doch b mit Zeichen befüllen, also b+=str.charAt[i]

for(int i=0;i<str.length()-2;++i){
   if(str.charAt[i]=='z' && str.charAt[i]=='p'){
           b+="zp";
           i=i+3;}
   else{
         b+=str.charAt[i];
      // oder wenn Dreierschritt auch hier zwingend:
      // b+str.substring(i,i+2);i=i+3;
}

Habe es allerdings nicht getestet, bin auch kein Java-Nerd, man könnte es definitiv noch vereinfachen.

Man muss aber noch checken, was z.B. bei zzpp passieren soll, oder bei zzppzzppzzpp

Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich

Normalerweise gibt es für so etwas regulärere Ausdrücke. Wenn ausdrücklich der Weg zufuß gewünscht wird, kann ich eine Lösung anbieten, die ich allerdings in JScript und nicht in Java umgesetzt habe. Aufgrund der Ähnlichkeiten findest du vielleicht schnell die entsprechenden Pendants.

main()

function main()
{
	var sResult
	sResult = zipZap("zipXzap") + "\n";
	sResult += zipZap("zopzop") + "\n";	
	sResult += zipZap("zzzopzop") + "\n";	
	sResult += zipZap("zibzap") + "\n";	
	sResult += zipZap("zip") + "\n";	
	sResult += zipZap("zi") + "\n";	
	sResult += zipZap("z") + "\n";	
	sResult += zipZap("") + "\n";	
	sResult += zipZap("zp") + "\n";	
	sResult += zipZap("abcppp") + "\n";	
	sResult += zipZap("azbcppp") + "\n";	
	sResult += zipZap("azbcpzp") + "\n";	

	MsgBox(sResult);
}

function zipZap(sZipZap)
{
	var i;
	var sRes = "";
	
	for(i=0;i<sZipZap.length;i++)
		if(!(!(i==0 || i>sZipZap.length-2) && sZipZap.substr(i-1,1) == "z" && sZipZap.substr(i+1,1) == "p"))
			sRes += sZipZap.substr(i,1);
	return sRes;
}

function MsgBox(sBody)
{
	var shell = new ActiveXObject("wscript.shell");
	shell.popup(sBody)
}
Woher ich das weiß:Berufserfahrung

Ist ja klar dass das nicht funktioniert wenn du dir den algorithmus anguckst. Wenn das pattern nicht zutrifft dann fügst du da direkt 3 zeichen ein, gehst dann einen weiter, und fügst wieder 3 zeichen ein.
Sprich aus ABCDE wird ABCBCDCDE.

Macht keinen sinn so.

mach doch einfach

public String zipZap(String str) {
  return str.replaceAll("z.p", "zp");
}

mehr muss in der methode nicht drin stehen. Kannst dir die schleife, counter und alles sparen. Warum das rad neu erfinden.

jort93  14.05.2019, 16:33

Wobei, da ist ja noch das count modulo 3, also kommt da was anderes raus. Aber wie gesagt, warum das rad neu erfinden wenns dafür schon ne stringmethode gibt.

1
Nichtsnutz12 
Fragesteller
 14.05.2019, 16:57

WASSSSS SO EINFACH und ich zerbeiße mir 2 Stunden den Kopf WTF ok danke ich Versuchs morgen aus kein Bock grad bin am Ps4 zocken

0
DivineSX  14.05.2019, 17:53

Stichwörter: String.replaceAll(String, String) ; RegEx

0
Mikkey  14.05.2019, 18:06

Es sollte besser

return str.replaceAll("z.*p", "zp");

heißen, sonst wird nur ein Zeichen entfernt.

0
jort93  14.05.2019, 18:34
@Mikkey

Soll ja auch nur jeweils ein zeichen entfernt werden. aus "zzzopzop" soll "zzzpzp" werden. Bei deinem vorschlag würde da ja "zp" drauß werden.
Dein vorschlag verfehlt die aufgabenstellung.

0
Mikkey  14.05.2019, 18:36
@jort93

In der Überschrift steht

alle Buchstaben eines Strings zwischen "z" und "p" entfernen
0
jort93  14.05.2019, 18:37
@Mikkey

Das ist gemeint als alle einzelnen buchstaben. Es sind ja ins gesamt mehrere buchstaben, aber pro z und p jeweils halt nur einer.

Auf dem bild ist das ja genauer formuliert mit Beispielen.

Aus zipXzap soll beispielsweise zpXzp werden. Bei deinem vorschlag wirds aber nur "zp".

0
Mikkey  14.05.2019, 18:40
@jort93

Ok, ich lese keinen Text auf angefügten Bildern, schon gar nicht, wenn die Überschrift eine Klare Aussage trifft.

0