Wie kann ich einen String wieder zusammensetzen und ausgeben lassen?

Bitte aktiviere JavaScript!
Hey, ich komme momentan auf keinen Lösungsweg. Ich schreibe ein Programm, mit dem Strings hinsichtlich der Groß- und Kleinschreibung verändert werden. Steht vor einem String in einem Satz ein "_", so soll dieser String komplett groß geschrieben werden. Steht am Ende eines Strings des Satzes jedoch ein "_", so soll dieser String komplett klein geschrieben werden.
Das habe ich soweit alles hinbekommen. Nur mein Problem ist jetzt die Ausgabe des Strings.

Will ich den kompletten Satz ausgeben, so kriege ich es momentan nur hin, die veränderten Strings auszugeben, nicht aber wieder den kompletten Satz. Also bspw: _Ich habe _Hunger. Dann erhalte ich nur ICH HUNGER. Das "habe" hängt er nicht an.
Hier mal die Klasse SplitString. Die Methoden der Groß- und Kleinschreibung habe ich jetzt nicht mit angehängt.

Ich bin über jeden Lösungsvorschlag dankbar.



Java:
import java.lang.reflect.Array;
import java.util.ArrayList;

public class SplitString {
    String input2,input3;
    String input4,input5;
    UpperCase change = new UpperCase();
    LowerCase changeone = new LowerCase();
    


    public void split(){
        String input = new java.util.Scanner(System.in).nextLine();
        String array1[] = input.split(" ");
        String sentences[] = input.split(" ");
        System.out.println("Input: " + input);
        for (String temp : array1) {
            if (temp.startsWith("_")) {
                input2 = change.upperCase(temp);
                input3 = input2.replace("_"," ");
              
                System.out.print(input3);
            }
            if(temp.endsWith("_")){
                input4 = changeone.lowerCase(temp);
                input5 = input4.replace("_"," ");
                System.out.println(input5);
            }else{

            }
        }
    
    }
}
 
Dein else Teil, noch nicht an der richtigen Stelle, ist ja noch leer.
Mit dem Else-Teil habe ich schon "einiges" probiert, habe aber irgendwie nie die richtige Ausgabe hinbekommen.

Aber ich habe jetzt eine hoffentlich gute Lösung gefunden. Für alle anderen Satzteile:
Java:
 if(!temp.startsWith("_") && (!temp.endsWith("_"))){
                    System.out.print(temp+" ");
                }
 
@NoGoogle Deine Lösung funktioniert nicht wirklich. Erstens wird der falsche Unterstrich ersetzt, wenn dieser im und am Ende eines Worts steht, zweitens wird immer ein Leerzeichen zu viel ausgegeben.

In Zusammenhang mit Deinem Eingangspost: wenn Du das Gefühl hast, den Wald vor lauter Bäumen nicht mehr zu sehen, bietet es sich an, den Spaß in kleinere Probleme aufzuteilen, die leichter handhabbar sind.

Ich schreibe ein Programm, mit dem Strings hinsichtlich der Groß- und Kleinschreibung verändert werden. Steht vor einem String in einem Satz ein "_", so soll dieser String komplett groß geschrieben werden. Steht am Ende eines Strings des Satzes jedoch ein "_", so soll dieser String komplett klein geschrieben werden.
Um bei diesem Beispiel und Deinem Ansatz zu bleiben, könnte man sich folgendes Vorgehen überlegen:

1. Teile den String in Einzelteile
2. Transformiere jedes Einzelteil
3. Baue einen String aus den Einzelteilen zusammen
4. Gib den String aus 3. aus

Das kann man praktisch unmittelbar als Code formulieren:
Java:
String[] parts = input.split(" "); // 1. Schritt
transform(parts); // 2. Schritt
String result = String.join(" ", parts); // 3. Schritt
System.out.println(result); // 4. Schritt
Von den Problemen 1 - 4 sind die Nummern 1, 3 und 4 bereits gelöst. Das Probleme 2 schaut man sich nun separat an.

Was muss bei der Transformation passieren? Auch hier teilen wir wieder in kleinere Probleme auf. Das erreicht man, indem man darauf verzichtet, zu beschreiben, wie einzelne Wörter transformiert werden sondern sich damit begnügt, dass sie transformiert werden.

Die Methode transform erhält also ein Array und ersetzt in diesem jedes Element durch ein transformiertes:
Java:
private void transform(String[] parts) {
    for (int i = 0; i < parts.length; i++) {
        parts[i] = transformWord(parts[i]);
    }
}
Ziemlich einfach.

Die Methode transformWord ist jetzt fast trivial: beginnt das Wort, das die Methode erhält, mit einem Unterstrich, soll das Wort ohne den Unterstrich in Großbuchstaben zurückzugeben. Analog gilt dies für den Unterstrich am Ende mit Kleinbuchstaben. Hat das Wort dagegen weder am Anfang noch am Ende einen Unterstrich, wird es unverändert zurückgegeben.

Java:
private String transformWord(String word) {
    String result = word;
    if (word.startsWith("_")) {
        result = word.substring(1);
    } else if (word.endsWith("_")) {
        result = word.substring(0, word.length()-1);
    }
    return result;
}
 
Oder so
Java:
	public static void main(String[] args) throws IOException {
		for (String string : new Scanner(System.in).nextLine().split(" ")) {
			if (string.startsWith("_")) {
				System.out.print(string.substring(1).toUpperCase() + " ");
			} else if (string.endsWith("_")) {
				System.out.print(string.substring(0, string.length() - 1).toLowerCase() + " ");
			} else {
				System.out.print(string + " ");
			}
		}
	}

Code:
_Heute _phantastisches Wetter._
HEUTE PHANTASTISCHES wetter.
 
@NoGoogle Deine Lösung funktioniert nicht wirklich. Erstens wird der falsche Unterstrich ersetzt, wenn dieser im und am Ende eines Worts steht, zweitens wird immer ein Leerzeichen zu viel ausgegeben.

In Zusammenhang mit Deinem Eingangspost: wenn Du das Gefühl hast, den Wald vor lauter Bäumen nicht mehr zu sehen, bietet es sich an, den Spaß in kleinere Probleme aufzuteilen, die leichter handhabbar sind.


Um bei diesem Beispiel und Deinem Ansatz zu bleiben, könnte man sich folgendes Vorgehen überlegen:

1. Teile den String in Einzelteile
2. Transformiere jedes Einzelteil
3. Baue einen String aus den Einzelteilen zusammen
4. Gib den String aus 3. aus

Das kann man praktisch unmittelbar als Code formulieren:
Java:
String[] parts = input.split(" "); // 1. Schritt
transform(parts); // 2. Schritt
String result = String.join(" ", parts); // 3. Schritt
System.out.println(result); // 4. Schritt
Von den Problemen 1 - 4 sind die Nummern 1, 3 und 4 bereits gelöst. Das Probleme 2 schaut man sich nun separat an.

Was muss bei der Transformation passieren? Auch hier teilen wir wieder in kleinere Probleme auf. Das erreicht man, indem man darauf verzichtet, zu beschreiben, wie einzelne Wörter transformiert werden sondern sich damit begnügt, dass sie transformiert werden.

Die Methode transform erhält also ein Array und ersetzt in diesem jedes Element durch ein transformiertes:
Java:
private void transform(String[] parts) {
    for (int i = 0; i < parts.length; i++) {
        parts[i] = transformWord(parts[i]);
    }
}
Ziemlich einfach.

Die Methode transformWord ist jetzt fast trivial: beginnt das Wort, das die Methode erhält, mit einem Unterstrich, soll das Wort ohne den Unterstrich in Großbuchstaben zurückzugeben. Analog gilt dies für den Unterstrich am Ende mit Kleinbuchstaben. Hat das Wort dagegen weder am Anfang noch am Ende einen Unterstrich, wird es unverändert zurückgegeben.

Java:
private String transformWord(String word) {
    String result = word;
    if (word.startsWith("_")) {
        result = word.substring(1);
    } else if (word.endsWith("_")) {
        result = word.substring(0, word.length()-1);
    }
    return result;
}
Vielen Dank für diese ausführliche Antwort. Ich habe meinen Code nun nach diesem Vorschlag erneut bearbeitet. Dabei ist mir aber aufgefallen, dass bei der Methode transformWord für beide Fälle, also Groß- und Kleinschreibung, noch die Methode toUpperCase bzw. toLowerCase fehlt.

Richtig wäre es doch so? Und welche Bedeutung hat eigentlich die Methode substring?
Java:
private String transformWord(String word){
        String result = word;
        if(word.startsWith("_")){
            result = word.substring(1).toUpperCase();
        }
        else if(word.endsWith("_")){
    result = word.substring(0,word.length()-1).toLowerCase();
        }
        return result;
    }
 
Richtig wäre es doch so?
Ja, die Case-Änderung habe ich vergessen :)

Und welche Bedeutung hat eigentlich die Methode substring?
Liefert den angegebenen Teil der Zeichenkette (s. https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#substring-int- und https://docs.oracle.com/javase/8/docs/api/java/lang/String.html#substring-int-int-)
 
Passende Stellenanzeigen aus deiner Region:

Oben