Switch Prefix Suffix

F

FranzFerdinand

Gast
Hallöle Leute,

ich hab da mal ne Frage zu Switch und Case.
Ich habe folgenden Text aktuell, nur mal so als Beispiel:
Java:
doseingabe = jTextFieldDosEingabe.getText();
		switch(doseingabe.toLowerCase()) {
		case "neustart":
			Spielstart.neustart();
			break;
		case "beenden":
			Spielstart.beenden();
		default:
		}
Der überprüft dann eben nach den Elementen neustart und beenden. Ich habe jedoch die ganze Zeit nach einer Funktion gegooglet, die ich nicht finden kann. Der überprüft ja jetzt ganze Werte. Kann ich auch einfach Wortausschnitte eingeben? Wie mache ich das?

Ich programmiere mit Swift, da gibt es die Funktionen variable.suffix("wortende") und variable.präfix("Wortanfang"), eine sehr praktische Funktion.

Ich hab für Java weder für Anfänge, noch Endungen, noch generelle Inhalte (im Wort irgendwo drin) was gefunden.

Kann mich jemand dazu wissentlich bereichern?

Danke schön. :)

Gruß
Lukas :)
 
Zuletzt bearbeitet von einem Moderator:

Flown

Administrator
Mitarbeiter
Also mit switch kannst du nur genaue Werte (String, enum, int, ...) prüfen, dass macht dies zu einer starren und sicheren Struktur.

Die String Klasse bietet dir zwei Methoden wie
Code:
str.startsWith("..."); str.endsWith("...");
.

Hier mal ein Beispiel:

Java:
public class Test {
  public static void main(String... args) {
    try (Scanner scanner = new Scanner(System.in)) {
      String value;
      switch (value = scanner.nextLine().toLowerCase()) {
        case "neustart":
          restart();
          break;
        case "beenden":
          end();
          break;
        default:
          if (value.startsWith("neu")) {
            restart();
          } else if (value.endsWith("enden")) {
            end();
          }
      }
    }
  }
  
  public static void restart() {
    System.out.println("Neustart");
  }
  
  public static void end() {
    System.out.println("Beenden");
  }
}
 
F

FranzFerdinand

Gast
Hallöle,

hm dachte ich mir schade. Ich hatte gehofft das direkt in einen der cases einzubinden und nicht in Default.
Man nutzt ja switch-case auch gerade dann, wenn man viele Abfragen hat, weil dann if zu anstrengend wäre. Das da oben war jetzt nur ein Beispiel, ich möchte mir ungern vorstellen da 20-30 Klopper in Default reinzuhauen.
Ich fragte, weil ich das aus Swift kenne:
Java:
String string = "BeginnEnde";
switch(string) {
case string.prefix("Begi"):
break;
case string.suffix("nde"):
break;
default:

Ich dachte jetzt daran, dass Java das auch so könne.

Danke schön für Deine Antwort.

Gruß
Lukas
 
Zuletzt bearbeitet von einem Moderator:
F

FranzFerdinand

Gast
Hm, okay. Dass das über Ifs geht seh ich ja nun. Aber ich hatte echt gedacht, Java wäre clever genug um das auch in Switch-Case zu benutzen. Ich benutze Switch Case ja gerade deswegen, weil ich keine Ifs haben möchte...

Danke schön trotzdem! Ihr könnt ja nichts dafür! Mit If klappt es nun.

Gruß
Lukas :)
 

Ruzmanz

Top Contributor
Lässt sich ein bisschen verschönern, erweitern usw...

Java:
import java.util.HashSet;
import java.util.Set;

public class Switch {
	private Set<Case> cases = new HashSet<>();
	
	public Switch() {
		cases.add(new Case("Beenden") {
			protected void executeCommand() { System.out.println("Beenden"); }
		});
		cases.add(new Case("Starten") {
			protected void executeCommand() { System.out.println("Starten"); }
		});
		cases.add(new Case("Abbrechen") {
			protected void executeCommand() { System.out.println("Abbrechen"); }
		});
		cases.add(new Case("Schhließen") {
			protected void executeCommand() { System.out.println("Schhließen"); }
		});
		cases.add(new Case("Stop") {
			protected void executeCommand() { System.out.println("Stop"); }
		});
		
		executeCases("", "en");
		executeCases("S", "en");
		
	}
	
	public void executeCases(String prefix, String suffix) {
		for(Case aCase: cases) {
			if(aCase.isWrappedIn(prefix, suffix)) {
				aCase.execute(prefix, suffix);
			}
		}
		System.out.println("#-------------------#");
	}
	
	public abstract class Case {
		private String command;
		
		public Case(String command) {
			this.command = command;
		}
		
		public String getText() {
			return command;
		}
		
		public void execute(String prefix, String suffix) {
			if(isWrappedIn(prefix, suffix)) {
				executeCommand();
			}
		}
		
		protected abstract void executeCommand();
		
		protected boolean isWrappedIn(String prefix, String suffix) {
			return command != null && prefix != null && suffix != null &&
					command.startsWith(prefix) && command.endsWith(suffix);
		}
	}
	
	public static void main(String[] args) {
		new Switch();
	}
}
 
F

FranzFerdinand

Gast
Hallöle,

ich habe es nun folgendermaßen angesetzt.
Das in Switch und Case zu verarbeitende Informatiönchen ist nämlich nach dem Schema text1:text2:text3 aufgeteilt. Immer Maximal 3 Informationen, durch Doppelpunkt getrennt. Kann aber auch nur eine sein.

Ich hatte wegen dieses StartsWith gefragt, weil ich immer nur den ersten Teil abfragen möchte vor dem Doppelpunkt.
Ich mache es nun anders mit split:
Java:
String irgendwas = doseingabe.split(":");

Aber dann ist der String ja nur in der Methode abrufbar...
Und ich kriege es einfach nicht hin das Teil global zu machen.

Ich definiere zu Anfang folgendes:
Java:
private ArrayList<String> doseingabepart = new ArrayList<String>();

Wenn ich es dann später mit folgendem abrufen möchte:
Java:
doseingabepart = doseingabe.split(":");
kommt mir immer diese Fehlermeldung ins Haus:
Typabweichung: Konvertierung von String[] auf ArrarList<String> nicht möglich.

Ja das Problem ist mir klar, aber ich krieg das einfach nicht hin! kann mir da jemand unter die arme greifen?


Dann am Ende würde ich dann eben bei meiner Frage nach switch(doseingabe[0]) suchen. ;)

Gruß
Lukas
 

Flown

Administrator
Mitarbeiter
Java:
doseingabepart.addAll(Arrays.asList(doseingabe.split(":")));
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben