Character in Wörtern vertauschen

Keule407

Mitglied
Hallo,

ich habe folgende Aufgabe zu lösen:

Der Text besteht aus Wortern mit genau einem Leerzeichen zwischen zwei Wörtern. Satzzeichen kommen nicht vor. Der zuruckgegebene String realisiert ein Buchstaben vertauschen nach obiger Motivation: Erster und letzter Buchstabe bleiben gleich, innere werden vertauscht. Wenn alle inneren Buchstaben verschieden sind, durfen vor und nach dem Vertauschen keine identischen Buchstaben an derselben Position stehen. Ausnahmen sind Worter mit drei Buchstaben. Weitere Anforderungen bezuglich des Vertauschens bestehen nicht.

Beispiel: Deis ist ein Staz den man totrz der gtrdehen Bbatsechun lseen knan

Dazu habe ich die unten folgende Methode geschrieben. Das Drehen der Wörter funktioniert auch, allerdings ist nach dem ersten Leerzeichen Schluss und mir wird im Prinzip nur das erste Wort gedreht. Vielleicht kann mir jemand weiterhelfen.

Vielen Dank

Java:
public class KreuzUndQuer {
	/* Methode zerlegt die Einzelwoerter und packt sie in StringArray */
	public static String[] printWords(String text) {
		int anfang = 0;
		int a = 0;

		char[] textInChar = text.toCharArray();
		int ende = textInChar.length;
		int wortAnzahl = 0;
		// zaehlt die Wortanzahl im String
		for (int i = 0; i < textInChar.length; i++) {
			if (textInChar[i] == ' ') {
				wortAnzahl++;
			}
		}
		// Array mit zaehler+1 Elementen erzeugen
		String[] array = new String[wortAnzahl + 1];

		// einzelnen Woerter in Array schreiben
		for (int i = 0; i < textInChar.length; i++) {
			if (textInChar[i] == ' ') {
				array[a] = text.substring(anfang, i);
				anfang = i + 1;
				a++;
			}
			array[a] = text.substring(anfang, ende);
		}
		return array;
	}

	public static String ersterUndLetzterGleich(String text) {
		// ruft das Array der Methode printWords auf
		String[] array = KreuzUndQuer.printWords(text);

		String[] result = new String[array.length];
		;
		// Schleife, die alle Wörter aus array bearbeitet
		for (int k = 0; k < array.length; k++) {
			// String substring = Wort aus dem array
			String substring = array[k];
			char erster = substring.charAt(0);
			char letzter = substring.charAt(substring.length() - 1);

			String mitte = substring.substring(1, substring.length() - 1);
			char[] mitteCharArray = mitte.toCharArray();

			char[] vertausche = new char[mitteCharArray.length];
			for (int i = 0; i < mitteCharArray.length; i++) {
				vertausche[i] = mitteCharArray[mitteCharArray.length - 1 - i];
			}
			char[] zwischenspeicher = new char[1];
			for (int j = 0; j < vertausche.length; j++) {
				for (int i = 0; i < vertausche.length; i++) {
					if (vertausche[i] == mitteCharArray[i]) {
						if (i != vertausche.length - 1) {
							zwischenspeicher[0] = vertausche[i];
							vertausche[i] = vertausche[i + 1];
							vertausche[i + 1] = zwischenspeicher[0];
						}
					}
				}
			}

			String vertauscht = new String(vertausche);
			vertauscht = erster + vertauscht + letzter;

			result[k] = vertauscht;
		}
		// erstes Element von Ergebnis muss
		String satz = result[0];
		// String wird zusammengesetzt
		for (int i = 1; i < result.length; i++) {
			satz = satz + " " + result[i];
		}

		return satz;

	}
}
 
Poste doch mal eine Testklasse bzw Methode.

Bei meinem Test lief alles, wie von mir erwartet. Etwas unschön finde ich aber, dass das Vertauschen stets noch dem gleichen Muster erfolgt. Gleiche Worte sind nach dem durcheinanderwürfeln also auch immer gleich. Da könnte man vielleicht mit ein paar Zufallswerten o.Ä. rumspielen.

Eine kleine Anmerkung aber schon mal: Für so eine Zerlegung deines Strings in Teilstrings eignet sich bestens der StringTokenizer (StringTokenizer (Java 2 Platform SE v1.4.2))

Gruß Fant

Code:
Input:   Dies ist ein Satz den man trotz gedrehten Buchstaben lesen kann
Output:  Deis ist ein Staz den man ttroz gtehreden Bebatshcun lseen knan
 
Zuletzt bearbeitet:
kann natürlich auch sein dass ich hier was falsch gemacht habe
Java:
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.print("Texteingabe: ");
		String text = scanner.next();
		
		System.out.println("Textausgabe: " + KreuzUndQuer.ersterUndLetzterGleich(text));
		scanner.close();
	}
 
Ja 😀, schönen Dank schon mal. allerdings habe ich jetzt noch das Problem dass meine whiteSpaces bei der Ausgabe weg sind. Einfach nen " " in der Ausgabe finde ich nen bisschen fruchtlos. kann ich dass noch irgendwie in meine Methode implementieren?
 
Die Leerzeichen verschwinden nicht einfach (siehe mein Testfall). Du schreibst sie vermutlich also gar nicht in den String rein. Zeig mal deine main-Methode her.

Gruß Fant
 
Java:
public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			String text = scanner.next();
			System.out.print(KreuzUndQuer.ersterUndLetzterGleich(text));
		}
		
		scanner.close();
	}
 
Java:
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Texteingabe: ");
        String text = scanner.nextLine();      
        System.out.println("Textausgabe: " + KreuzUndQuer.ersterUndLetzterGleich(text));
        scanner.close();
    }

Oder so
Java:
public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()) {
            String text = scanner.next();
            System.out.print(KreuzUndQuer.ersterUndLetzterGleich(text) + " ");
        }
        
        scanner.close();
    }

Also du fügst dem String ein Leerzeichen zu
 
Zuletzt bearbeitet:

Zurück
Oben