# Wie prüfen, ob ein String Teil eines Enum Types ist?



## dh909 (1. Dez 2009)

Hallo,

gibt es eine Möglichkeit zu prüfen, ob eine Eingabe (String) Teil eines Enumerated Types ist?

Wie zum Beispiel: String.isElement (EnumType), was dann einen Wert vom Typ boolean zurückliefert.

Danke!


----------



## SlaterB (1. Dez 2009)

die definiert sich denn die Eigenschaft, 'als String Teil eines Enumerated Types zu sein'?
soll der String equal dem tostring() oder name() eines der Enum-Werte sein?

von einem Class-Objekt kann man sich ein Array aller Werte abholen, falls es ein Enum ist,
dann for-Schleife darüber

Class (Java 2 Platform SE 5.0)

wenn der Enum allerdings direkt benannt wird, kann man auch gleich die Values übergeben:
boolean x = isElement(suchString,Monate.values());


----------



## Spacerat (2. Dez 2009)

@TS: Entspricht dies so ungefähr deinen Vorstellungen?
	
	
	
	





```
enum WeekDay {
  MONTAG,
  DIENSTAG,
  // aso...
  ;

  public static boolean containsElement(String eingabe)
  {
    for(WeekDay t : WeekDay.values()) {
      if(t.toString().toLowerCase().contains(eingabe.toLowerCase())) {
        return true;
      }
    }
    return false;
  }
}

public class EnumContainsString
{
  public static void main(String[] args)
  {
    String eingabe = "Montag"; // moeglicherweise durch args[0] ersetzen
    System.out.println(WeekDay.containsElement(eingabe));
  }
}
```


----------



## tfa (2. Dez 2009)

Warum so kompliziert? Es gibt doch [c]Enum.valueOf(String)[/c]. Wenn es den Enum-String nicht gibt, fliegt zwar eine IllegalArgumentException, aber man kann sich ja eine kleine Testmethode drum basteln.


----------



## Spacerat (2. Dez 2009)

Daran habe ich auch schon gedacht. Da werden aber auch nur komplette Enum-Strings statt, wie gefordert, Teil-Strings von Enum-Typen erkannt.


----------



## tfa (2. Dez 2009)

Das hab ich anders verstanden. Von Teil-Strings steht nichts in der Frage, nur ob ein String "Teil eines Enumerated Types" ist. 
Vielleicht klärt der TS das ja noch.


----------



## dh909 (2. Dez 2009)

Vielen Dank erstmal fuer die Antworten.

Es geht darum, wenn ich zum Beispiel einen String eingebe ("Montag"), moechte ich testen ob dieser String in dem EnumType

enum Wochentag {MONTAG, DIENSTAG, MITTWOCH...};

enthalten ist.

Vielen Dank!


----------



## tfa (2. Dez 2009)

Die Lösungsvorschläge stehen ja oben schon. "Montag" wäre übrigens nicht enthalten, dafür aber "MONTAG".


----------



## faetzminator (2. Dez 2009)

Wenn Gross- und Kleinschreibung ignoriert werden muss, dann müsste man trotzdem eine Methode schreiben. Anderenfalls kann man den Einzeiler mit einem try/catch verwenden.


----------



## Spacerat (2. Dez 2009)

Deswegen habe ich es ja so Vorgeschlagen. "Montag" würde bei mir dabei *true* ergeben.
@Edit: Hab' den Codeschnipsel mal dahingehend angepasst.


----------



## tfa (2. Dez 2009)

Spacerat hat gesagt.:


> Deswegen habe ich es ja so Vorgeschlagen. "Montag" würde bei mir dabei *true* ergeben.


Trotzdem ist das mit dem contains gefährlich. Dann ergibt "T" Montag, "E" Dienstag, "WO" Mittwoch, etc. Welchen Sinn soll das haben?


----------



## faetzminator (2. Dez 2009)

es genügt doch [c]t.equalsIgnoreCase(eingabe)[/c] in der Methode.


----------



## Spacerat (2. Dez 2009)

@tfa: Wenn du so fragst... gar keinen. Bei der Themeneröffnung war von Wochentagen ja auch nicht die Rede und es bleibt ja auch keineswegs ausgeschlossen, dass es irgendwann, irgendwo (anders) doch Sinn machen könnte.


----------

