2012-10-01 14 views
8

मैं निम्नलिखित के रूप में अमेरिका के सभी राज्यों की एक enum सूची है:जावा में स्ट्रिंग से enum प्रकार की तुलना कैसे करें?

public enum State 
{ AL, AK, AZ, AR, ..., WY } 

और अपने परीक्षण फ़ाइल में, मैं एक पाठ फ़ाइल है कि राज्य को शामिल से इनपुट पढ़ा जाएगा। चूंकि वे स्ट्रिंग कर रहे हैं, मैं इसे कैसे enum सूची के मूल्य के आदेश चर है कि मैं के रूप में स्थापित किया है करने के लिए मान देना में तुलना कर सकते हैं:

private State state; 

मैं समझता हूँ कि मैं enum सूची के माध्यम से जाने की जरूरत है। हालांकि, चूंकि मान स्ट्रिंग प्रकार नहीं हैं, तो आप इसकी तुलना कैसे कर सकते हैं? यही वह है जो मैं सिर्फ अंधेरे से टाइप करता हूं। मुझे नहीं पता कि यह सही है या नहीं।

public void setState(String s) 
{ 
    for (State st : State.values()) 
    { 
     if (s == State.values().toString()) 
     { 
      s = State.valueOf(); 
      break; 
     } 
    } 
} 
+0

'==' -> '.equals (..)' – arshajii

उत्तर

22

कोशिश इस

public void setState(String s){ 
state = State.valueOf(s); 
} 

आप IllegalArgumentException कि फेंक दिया जा सकता है संभाल करने के लिए करता है, तो "एस" मूल्य किसी भी "राज्य"

+4

हालांकि इसे 'अवैध अवैधकरण 'को संभालना चाहिए। –

4

.name() विधि का उपयोग करें। st.name() की तरह। जैसे State.AL.name() स्ट्रिंग "AL" लौटाता है।

तो,

if(st.name().equalsIgnoreCase(s)) { 

काम करना चाहिए।

2

स्ट्रिंग के लिए enum तुलना करने के लिए मेल नहीं खाती चाहते हो सकता है

for (Object s : State.values()) 
    { 
      if (theString.equals(s.toString())) 
     { 
      // theString is equal State object 

     } 
    } 
+0

.toString() वास्तव में ऐसा करने का सही तरीका नहीं है, हालांकि यह काम करेगा। .name() विधि को प्राथमिकता दी जाती है क्योंकि आप enum क्लास में जो कुछ भी चाहते हैं उसे करने के लिए .toString() विधि को ओवरराइड कर सकते हैं, लेकिन .name() विधि को एनम क्लास में अंतिम घोषित किया जाता है (जो कि मूल वर्ग है किसी भी जावा enum)। – Matt